Est-ce légal? Si ce n'est pas le cas, le code suivant le permettra-t-il?Accéder aux éléments privés d'un objet de la même classe
class Foo
{
friend class Foo;
}
Est-ce légal? Si ce n'est pas le cas, le code suivant le permettra-t-il?Accéder aux éléments privés d'un objet de la même classe
class Foo
{
friend class Foo;
}
C'est redondant. Foo a déjà accès à tous les membres de Foo. Deux objets Foo peuvent accéder aux membres de l'autre.
class Foo {
public:
int touchOtherParts(const Foo &foo) {return foo.privateparts;}
private:
int privateparts;
};
Foo a,b;
b.touchOtherParts(a);
Le code ci-dessus fonctionnera très bien. B accédera au membre de données privé d'un.
Il est redondant et inutile. De plus, je reçois l'avertissement suivant en g ++
warning: class ‘Foo’ is implicitly friends with itself
Oui il est légal pour un objet de classe Foo
pour accéder aux membres privés d'un autre objet de la classe Foo
. Ceci est souvent nécessaire pour des choses comme la construction de copie et l'affectation, et aucune déclaration d'ami spécial n'est requise.
Les classes qui s'auto-associent ont du sens si elles sont des modèles, car chaque instanciation avec des paramètres distincts est une classe différente.
Pourquoi avez-vous besoin de cela? – ybungalobill