Declarações de amigo
Se você declarar uma função de amigo que não tenha sido declarada previamente, essa função é exportada para o escopo de nonclass de fechamento.
Funções declaradas na declaração de uma amigo são tratadas como se tivesse sido declarados, o usando o extern palavra-chave.(Para obter mais informações sobre extern, consulte Especificadores estática de classe de armazenamento.)
Embora funções com escopo global podem ser declaradas como amigos antes para seus protótipos, funções de membro não podem ser declaradas como amigos antes da aparência da sua declaração de classe completa.Mostra o seguinte código por que isso falhar:
class ForwardDeclared; // Class name is known.
class HasFriends
{
friend int ForwardDeclared::IsAFriend(); // C2039 error expected
};
O exemplo anterior insere o nome da classe ForwardDeclared em escopo, mas a declaração completa — especificamente, a parte que declara a função IsAFriend — não é conhecido.Portanto, o friend declaração na classe HasFriends gera um erro.
Para declarar duas classes que são amigos um do outro, a segunda classe inteira deve ser especificada como um amigo da primeira classe.A razão para essa restrição é que o compilador não tem informações suficientes para declarar amigo individual funções apenas no ponto onde a segunda classe é declarada.
Observação |
---|
Embora a segunda classe inteira deve ser um amigo para a primeira classe, você pode selecionar quais funções na primeira classe será amigos da classe segundo. |