Funciones y Clases Amigas Friend Miembros Estticos Static
Funciones y Clases Amigas (Friend) Miembros Estáticos (Static) Agustín J. González ELO 329
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. Función tiene global acceso a los miembros No exclusiva de la clase!! Solo prototipo, su definición no pertenece a la clase class Course y{protegidos privados de la clase. public: friend La función global friend tendráCourse acceso a bool función Validate. Course. Data(const &C); los miembros como si fuera un método de la private: int n. Credits; clase. //. . . }; Lenguaje y Programación Orientados a Objetos 2
Validate. Course. Data() El calificador friend no aparece en la implementación de la función Notar el acceso a miembros privados de la clase bool Validate. Course. Data(const Course & C) { if( C. n. Credits < 1 || C. n. Credits > 5 ) return false; } return true; } Lenguaje y Programación Orientados a Objetos 3
Funciones Friend, otro ejemplo class Complex { public: Complex( float re, float im ); friend Complex operator+( Complex Sólo first, prototipo Complex second ); private: float real, imag; }; Complex operator+( Complex first, Complex Lenguaje y Programación Orientados a second ) // implementación Objetos 4
Clases Friend // Example of the friend class Your. Class { friend class Your. Other. Class; // Declare a friend class private: int top. Secret; Una clase amiga (friend) es una }; clase cuyas funciones miembros class Your. Other. Class { public: void change( Your. Class yc ); }; 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. void Your. Other. Class: : change( Your. Class yc ) { yc. top. Secret++; // Puede acceder datos privados } Lenguaje y Programación Orientados a Objetos 5
Clases Friend (cont. ) La “Amistad” no es mutua a menos que explícitamente sea especificada. En el ejemplo previo, los miembros función de Your. Class no pueden acceder a miembros privados de Your. Other. Class. La “Amistad” no se hereda; esto es, clases derivadas de Your. Other. Class no pueden acceder a miembros privados de Your. Class. Tampoco es transitiva; esto es clases que son “friends” de Your. Other. Class no pueden acceder a miembros privados de Your. Class. Lenguaje y Programación Orientados a Es importante en sobre carga del operador << Objetos 6
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 Lenguaje y Programación Orientados a Objetos 7 de la clase
Declaración de Datos Estáticos La palabra clave static debe ser usada. class Student { //. . . private: static int m_sn. Count; //instance m_sn. Count }; Lenguaje y Programación Orientados a Objetos 8
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_sn. Count = 0; Asigna memoria e inicia el valor de partida Lenguaje y Programación Orientados a Objetos 9
Creación de un Contador de Instancias Usamos el constructor y destructor para incrementar y decrementar el contador: Student: : Student() { m_sn. Count++; } Student: : ~Student() { m_sn. Count--; } Lenguaje y Programación Orientados a Objetos 10
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_Instance. Count(); private: static int m_sn. Count; }; // instance count Lenguaje y Programación Orientados a Objetos 11
Llamando a Funciones Estáticas Usamos ya sea el nombre de la case o una instancia de la clase como calificador: cout << Student: : get_Instance. Count(); S 1; S 2; Student: : get_Instance. Count(); S 1. get_Instance. Count(); Lenguaje y Programación Orientados a Objetos // 0 // 2 12
- Slides: 12