Partilhar via


Declarações de amigo

Se você declarar uma função de amigo que não foi declarada anteriormente, essa função é exportada para o escopo de envolvimento sem classe.

As funções declaradas em uma declaração de amigo são tratadas como se tivessem sido declaradas usando a palavra-chave extern. (Para obter mais informações sobre extern, consulteEspecificadores de classe de armazenamento estático.)

Ainda que as funções com escopo global possam ser declaradas como amigos antes dos protótipos, as funções de membro não podem ser declaradas como amigos antes da aparência de sua declaração completa da classe. O exemplo de código a seguir mostra porque isso falha:

class ForwardDeclared;   // Class name is known.
class HasFriends
{
    friend int ForwardDeclared::IsAFriend();   // C2039 error expected
};

O exemplo anterior insere o nome da classe ForwardDeclared no escopo, mas a declaração completa — especificamente, a parte que declara a função IsAFriend — não é conhecida. Consequentemente, a declaração friend na classe HasFriends gera um erro.

Para declarar duas classes que são amigas da outro, a segunda classe inteira deve ser especificada como amiga de primeira classe. A razão para essa restrição é que o compilador tem informações suficientes para declarar funções individuais de amigo somente no ponto onde a segunda classe é declarada.

Dica

Embora a segunda classe inteira deve ser amiga da primeira classe, você pode selecionar quais funções na primeira classe serão amigas da segunda classe.

Consulte também

Referência

friend (C++)