Funções C ++ Friend
Uma função amiga de uma classe é definida fora do escopo dessa classe, mas tem o direito de acessar todos os membros privados e protegidos da classe. Embora os protótipos para funções de amigo apareçam na definição de classe, amigos não são funções de membro.
Um amigo pode ser uma função, modelo de função ou função de membro, ou uma classe ou modelo de classe, caso em que toda a classe e todos os seus membros são amigos.
Para declarar uma função como amiga de uma classe, preceda o protótipo da função na definição da classe com a palavra-chave friend como segue -
class Box {
double width;
public:
double length;
friend void printWidth( Box box );
void setWidth( double wid );
};
Para declarar todas as funções-membro da classe ClassTwo como amigos da classe ClassOne, coloque a seguinte declaração na definição da classe ClassOne -
friend class ClassTwo;
Considere o seguinte programa -
#include <iostream>
using namespace std;
class Box {
double width;
public:
friend void printWidth( Box box );
void setWidth( double wid );
};
// Member function definition
void Box::setWidth( double wid ) {
width = wid;
}
// Note: printWidth() is not a member function of any class.
void printWidth( Box box ) {
/* Because printWidth() is a friend of Box, it can
directly access any member of this class */
cout << "Width of box : " << box.width <<endl;
}
// Main function for the program
int main() {
Box box;
// set box width without member function
box.setWidth(10.0);
// Use friend function to print the wdith.
printWidth( box );
return 0;
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Width of box : 10