Existe uma diferença entre declarar uma função / classe de amigo como privada ou pública? Não consigo encontrar nada sobre isso online.
Quero dizer a diferença entre:
class A
{
public:
friend class B;
};
e
class A
{
private: //or nothing as the default is private
friend class B;
};
Existe alguma diferença?
friend
classe acesse os membros declaradosprivate
na classe que fez a declaração. No caso deste exemplo, uma instância da classe B pode acessar os membros privados da classe ARespostas:
Não, não há diferença - basta dizer que a classe B é amiga da classe A e agora pode acessar seus membros privados e protegidos, só isso.
fonte
friend
detalhe de implementação ou parte da interface?class Friend
que podem acessar todos os membros privados da classe atual.operator==(T, T)
usando membros de dados privados deT
e usefriend
como um detalhe de implementação para queoperator==
possa aparecer como um não membro. IMO, esta amizade não deve aparecer na interface pública (como será gerada pelo Doxygen por exemplo)Como a sintaxe
friend class B
não declara um membro da classeA
, não importa onde você a escreva, a classeB
é amiga da classeA
.Além disso, se você escrever
friend class B
naprotected
seção deA
, NÃO significa queB
pode acessar apenasprotected
epublic
membros deA
.Lembre-se sempre de que, uma vez que se
B
torne amigoA
, ele poderá acessar qualquer membroA
, independentemente da seção em que você escreverfriend class B
.fonte
A declaração de amigo aparece em um corpo de classe e concede a uma função ou outra classe acesso a membros privados e protegidos da classe onde a declaração de amigo aparece.
Como esses especificadores de acesso não afetam o significado das declarações de amigos (elas podem aparecer nas seções privada: ou pública: sem diferença).
fonte