2010-09-30 11 views

Antwort

22

Das ist überflüssig. Foo hat bereits Zugriff auf alle Foo-Mitglieder. Zwei Foo-Objekte können auf die Mitglieder des jeweils anderen zugreifen.

class Foo { 
public: 
    int touchOtherParts(const Foo &foo) {return foo.privateparts;} 
private: 
    int privateparts; 
}; 

Foo a,b; 
b.touchOtherParts(a); 

Der obige Code funktioniert einwandfrei. B wird auf das private Datenelement von a zugreifen.

+5

+1 sehr originell mit berührenden privaten Teilen – Alex

+2

@Alex: es ist ein altes C++ - Wortspiel, dass C++ wahrscheinlich die einzige Sprache ist, in der man seinen Freunden erlaubt, seine eigenen Teile zu berühren :) –

+3

... aber nicht die Eltern – Arun

3

Es ist redundant und unnötig. Außerdem erhalte ich die folgende Warnung in g ++

warning: class ‘Foo’ is implicitly friends with itself 
4

Ja, es ist legal für ein Objekt der Klasse FooFoo die privaten Mitglieder eines anderen Objekts der Klasse zuzugreifen. Dies ist häufig notwendig für Dinge wie Kopieraufbau und -zuweisung, und es ist keine spezielle Friend-Deklaration erforderlich.

0

Klassen, die sich selbst frienden, sind sinnvoll, wenn sie Vorlagen sind, da jede Instanz mit unterschiedlichen Parametern eine andere Klasse ist.

Verwandte Themen