frage zu classe
-
gibt es eine möglichkeit zubestimmen das man eine funktion
in der selben und in einer andere classe verwenden darf aber in einer anderen nichtclass My{ int x; My(); int get(); }; My::My():x(10){} int My::get(){return x;} class My2{ My xx; int get(); } int You::get(){return xx.get();} // in der classe ist es erlaubt get zu benutzen class You{ My xx; int get(); } int My2::get(){return xx.get();} //in der klasse is es nich erlaubt get zu benutzen
-
Nur auf die eigene Klasse kannst du die Funktion einschränken, indem du sie in den private-Bereich packst. Wenn du einzelne Ausnahmen erlauben willst, kannst du den entsprechenden Klassen friend-Zugang gewähren:
class My { private: int x; int get(); public: My(); friend class My2; }; My::My():x(10){} int My::get(){return x;} class My2{ My xx; int get(); } int My2::get(){return xx.get();} // My2 ist friend, kommt also an die privaten Member dran class You{ My xx; int get(); } int You::get(){return xx.get();} // You ist *kein* friend, der Compiler verweigert die Zusammenarbeit
-
kann man mit den befehl friend
auf die ganze klasse zu greifen oder nur da wo man es definirt hat (z.b. im public bereich)geht so was auch:
wenn man jetzt ein pointer hat der auf xx zeigt
kann man doch damit auch auf private dinge zu greifen
oder?class My2{ My xx; int get(); public: My* getpointer(); } int My2::get(){return xx.get();} My* My2::getpointer(){return &xx;} getpointer()->x = 20; //kann man dann einfach so auf x zu greifen
-
Bei friend ist es egal, wo es innerhalb der Klassendeklaration steht, die Friend-Klasse (oder alternativ kann man auch einzelnen Funktionen angeben) hat immer Zugriff auf alle Daten (public, protected und private).
-
Btw, auf die Daten zugreifen darf nur derjenige, der als friend definiert wurde - d.h. die Zuweisung 'getpointer()->x = 20;' funktioniert nur im Inneren einer My2-Methode.