En la programación orientada a objetos , una función amiga , que es una "amiga" de una clase dada , es una función que tiene el mismo acceso que los métodos a datos privados y protegidos . [1]
Una función amiga es declarada por la clase que otorga acceso, por lo que las funciones amiga son parte de la interfaz de la clase, como los métodos. Las funciones de amigo permiten una sintaxis alternativa para usar objetos, por ejemplo, en f(x)
lugar de x.f()
o en g(x,y)
lugar de x.g(y)
. Las funciones de amigo tienen las mismas implicaciones en la encapsulación que los métodos.
Casos de uso
Este enfoque puede usarse en una función amigable cuando una función necesita acceder a datos privados en objetos de dos clases diferentes. Esto se puede lograr de dos formas similares
- una función de ámbito global o de espacio de nombres puede declararse como amiga de ambas clases
- una función miembro de una clase puede declararse como amiga de otra.
#include usando el espacio de nombres std ; clase Foo ; // Reenviar la declaración de la clase Foo para, por ejemplo, compilar. class Bar { privado : int a = 0 ; público : espectáculo vacío ( Bar & x , Foo & y ); show vacío de amigos ( Bar & x , Foo & y ); // declaración de amigo global }; clase Foo { privado : int b = 6 ; público : show vacío de amigos ( Bar & x , Foo & y ); // declaración de mundial amigo amigo vacío Bar :: espectáculo ( Bar y x , Foo y Y ); // declaración de amigo de otra clase }; // Definición de una función miembro de Bar; este miembro es amigo de Foo void Bar :: show ( Bar & x , Foo & y ) { cout << "Mostrar vía miembro de función de Bar" << endl ; cout << "Barra :: a =" << x . a << endl ; cout << "Foo :: b =" << y . b << endl ; } // Amigo para Bar y Foo, definición de función global void show ( Bar & x , Foo & y ) { cout << "Mostrar mediante función global" << endl ; cout << "Barra :: a =" << x . a << endl ; cout << "Foo :: b =" << y . b << endl ; } int main () { Bar a ; Foo b ; mostrar ( a , b ); a . mostrar ( a , b ); }
Referencias
enlaces externos
- Tutorial de función de amigo de C ++ en CoderSource.net
- Tutorial de amistad y herencia de C ++ en cplusplus.com