friend auf private Methode
-
Hallo!
In der Methode void test() von Klasse C2 möchte ich unbedingt auf die private Methode int plus(int IrgendEinElement) von Klasse C1 zugreifen können (dazu muss ich doch friend benutzen???)! Die Kapselung muss unbedingt erhalten bleiben! Warum bekomme ich die Fehlermeldung:
Kein Zugriff auf private Element, dessen Deklaration in der Klasse "C1" erfolgte ...
//////////////////// // Klasse C1 // class C1{ int status; // ... public: void set_status(int state); void irgendwas(int x, int y, int z); private: int plus(int IrgendEinElement); }; int C1::plus(int IrgendEinElement) { return(IrgendEinElement++); } //////////////////// // Klasse C2 // class C2{ friend int C1::plus(int IrgendEinElement); void test(); }; void C2::test() { C1 cl; int wert = 3; int t = c1.plus(wert); }
-
Hallo,
du verdrehst hier die friend-Semantik. Du kannst nicht dich zu einem Freund von mir erklären und dann in meinen Schubladen rumwühlen. Da könnte ja jeder kommen. Vielmehr kann nur ich dich zu meinem Freund erklären, so dass du danach in meinen Schubladen wühlen darfst.Wenn C2 auf die privaten Elemente von C1 zugreifen können soll, dann muss C1 C2 zu einem friend erklären. Nicht andersherum.
-
C2 kann nicht von sich aus behaupten ein Freund von C1 zu sein
Sonst wäre die ganze Kapselung damit ja aufgebrochen wenn jeder sagen könnte er wäre mein Freund und dann meine privaten Sachen durchstöbert.C1 muss sagen, dass C2 ein freund ist.