Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)

Slides:



Advertisements
Presentaciones similares
Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;
Advertisements

Programación Orientada a Objetos usando C++
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
1 Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 329.
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend) Agustín J. González ELO329.
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend) Agustín J. González Versión Original de Kip Irvine ELO326: Seminario II 2do. Sem
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend) Agustín J. González Versión Original de Kip Irvine ELO329.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
/** * Write a description of class General here. */ public class General { // instance variables - replace the example below with your own private int.
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend)‏ Agustín J. González ELO329.
This y static. This Normalmente, dentro del cuerpo de un método de un objeto se puede referir directamente a las variables miembros del objeto. Sin embargo,
PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento y constructores.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
Clases, Objetos y Métodos (II)
Clases en C++ Agustín J. González ELO329.
BREVE INTRODUCCION A LA PROGRAMACION
Algunas Características de C++ no presentes en C
Polimorfismo y Métodos Virtuales
Manejo de Punteros y objetos en memoria dinámica en C++
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Algunas Características de C++ no presentes en C
Clases y Objetos en Java
Definición y Conversión de datos
Polimorfismo en C++, ligado dinámico y Métodos Virtuales
Clases en C++ Agustín J. González ELO329.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Manejo de Excepciones Agustín J. González ELO329.
Vectors (Vectores)‏ e Iteradores
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Asignación Dinámica de Memoria
Algunas Características de C++ no presentes en C
Manejo de Punteros y objetos en memoria dinámica en C++
Patrones de Diseño Agustín J. González ElO329.
Clases y Objetos en Java
Definición y Conversión de datos
Herencia Agustín J. González ELO329.
Herencia en C#.
Manejo de Excepciones Agustín J. González ELO329.
Vectors (Vectores)‏ e Iteradores
Plantillas (Templates)‏
Algunas Características de C++ no presentes en C
Manejo de Excepciones Agustín J. González ELO329.
Manejo de Excepciones Agustín J. González ELO329.
Manejo de Punteros y objetos en memoria dinámica en C++
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Herencia en C++ Agustín J. González ELO329.
Clases en C++ Agustín J. González ELO329.
Herencia en C++ Agustín J. González ELO329.
Vectors (Vectores)‏ Agustín J. González ELO329.
Algunas Características de C++ no presentes en C
Templates (en español: Pantillas, modelos, patrones)‏
Manejo de Punteros y objetos en memoria dinámica en C++
Manejo de Excepciones en C++
Manejo de Punteros y objetos en memoria dinámica en C++
Polimorfismo en C++, ligado dinámico y Métodos Virtuales
Herencia en C++ Agustín J. González ELO329.
Manejo de Excepciones en C++
Herencia en C++ Agustín J. González ELO329.
Polimorfismo en C++, ligado dinámico y Métodos Virtuales
Herencia en C++ Agustín J. González ELO329.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Algunas Características de C++ no presentes en C
Polimorfismo en C++ y Métodos Virtuales
Templates (en español: Pantillas, modelos, patrones)‏
Herencia Agustín J. González ELO329.
Herencia en C++ Agustín J. González ELO329.
Transcripción de la presentación:

Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static) Agustín J. González ELO329

Funciones y Clases Friend El calificador friend se aplica a funciones globales y clases para otorgar acceso a miembros privados y protegidos de la clase que da el permiso. Una función Friend de una clase es aquella que sin ser método tiene acceso a los miembros privados y protegidos de la clase. La función función global friend tendrá acceso a los miembros como si fuera un método de la clase. Función global No exclusiva de la clase!! Solo prototipo, su definición no pertenece a la clase class Course { public: friend bool ValidateCourseData(const Course &C); private: int nCredits; //... }; Lenguaje y Programación Orientados a Objetos

ValidateCourseData()‏ El calificador friend no aparece en la implementación de la función Notar el acceso a miembros privados de la clase bool ValidateCourseData(const Course & C)‏ { if( C.nCredits < 1 || C.nCredits > 5 )‏ return false; } return true; Lenguaje y Programación Orientados a Objetos

Funciones Friend, otro ejemplo class Complex { public: Complex( float re, float im ); friend Complex operator+( Complex first, Complex second ); private: float real, imag; }; Complex operator+( Complex first, Complex second ) // implementación { return Complex( first.real + second.real, first.imag + second.imag ); } En este Ejemplo, la función operator+ tiene acceso a los miembros privados de Complex Sólo prototipo Lenguaje y Programación Orientados a Objetos

Lenguaje y Programación Orientados a Objetos Clases Friend ‏ // Example of the friend class class YourClass { friend class YourOtherClass; // Declare a friend class private: int topSecret; }; class YourOtherClass public: void change( YourClass yc ); void YourOtherClass::change( YourClass yc )‏ yc.topSecret++; // Puede acceder datos privados } Una clase amiga (friend) es una clase cuyas funciones miembros son como funciones miembros de la clase que la hace amiga. Sus funciones miembros tienen acceso a los miembros privados y protegidos de la otra clase. Lenguaje y Programación Orientados a Objetos

Lenguaje y Programación Orientados a Objetos Clases Friend (cont.)‏ La “Amistad” no es mutua a menos que explícitamente sea especificada. En el ejemplo previo, los miembros función de YourClass no pueden acceder a miembros privados de YourOtherClass. La “Amistad” no se hereda; esto es, clases derivadas de YourOtherClass no pueden acceder a miembros privados de YourClass. Tampoco es transitiva; esto es clases que son “friends” de YourOtherClass no pueden acceder a miembros privados de YourClass. Es importante en sobre carga del operador << para salida de datos en clases estándares. Ver ejemplo CVectorFriend Lenguaje y Programación Orientados a Objetos

Static: Miembros Estáticos Estas variables tiene existencia desde que el programa se inicia hasta que termina. Datos Miembro estáticos Una instancia de la variable es compartida por todas las instancias de la clase. Todos los objetos de esa clase comparten el mismo valor del miembro estático Funciones miembro Estáticas Estas funciones pueden ser invocadas sobre la clase, no solo sobre una instancia en particular. La función sólo puede acceder miembros estáticos de la clase Es posible pensar en miembros estáticos como atributos de la clase y no de objetos. No hay gran diferencia con Java Lenguaje y Programación Orientados a Objetos

Declaración de Datos Estáticos La palabra clave static debe ser usada. class Student { //... private: static int m_snCount; //instance m_snCount }; Lenguaje y Programación Orientados a Objetos

Creación de un contador de instancias La inicialización del dato estático no se efectúa en el constructor pues existen previo a la creación de cualquier objeto. Un miembro estático puede contar el número de instancias de una clase. // student.cpp int Student::m_snCount = 0; Asigna memoria e inicia el valor de partida Lenguaje y Programación Orientados a Objetos

Creación de un Contador de Instancias Usamos el constructor y destructor para incrementar y decrementar el contador: Student::Student()‏ { m_snCount++; } Student::~Student()‏ m_snCount--; Lenguaje y Programación Orientados a Objetos

Miembros de Función Estáticos Usamos miembros de función estáticos para permitir el acceso público a miembros de datos estáticos. class Student { public: static int get_InstanceCount(); private: static int m_snCount; // instance count }; Lenguaje y Programación Orientados a Objetos

Llamando a Funciones Estáticas Usamos ya sea el nombre de la case o una instancia de la clase como calificador: cout << Student::get_InstanceCount(); // 0 Student S1; Student S2; cout << Student::get_InstanceCount(); // 2 cout << S1.get_InstanceCount(); // 2 Lenguaje y Programación Orientados a Objetos