Selbstverliebte Klasse
- 
					
					
					
					
 Griaß eich aus Österreich! Ich stieß heute durch Zufall auf solch ein Codefragment: class Foobar { friend class Foobar; public: ... }Welchen Effekt hat das? Ich habe im Netz recherchiert, jedoch nur unbefriedigende Antworten erhalten, unter anderem auch ein pdf wo das als Quizfrage drin war. mfG 
 
- 
					
					
					
					
 wenn wir schonmal bei quiz sind wuerd ich jetzt mal darauf tippen das dass keinen effekt hat. mal sehen wer den veto setzt ^^. 
 
- 
					
					
					
					
 hmm also mein compile g++(gcc 3.4) gibt nen fehler aus. Weil es eine implizite friend deklaration auf sich selbst ist. 
 Hmm, ich weiss leider nicht was der Standard dazu sagt, aber ich denke dass gcc recht standardkonform ist. Wäre dieser Fehler nicht, würde diese Zeile afaik ohne Wirkung sein, da friends ja nur auf private Member einer Klasse zugreifen können, und eine Klasse selbst eh auf die eigenen (private) Member zugreifen kann.//edit 
 Ich lese meine Posts nicht nochmal, da ich besseres zu tun habe
 
- 
					
					
					
					
 Mein Tipp: 
 vollkommen legaler Code, aber sinnlos (weil er keinen effekt hat).
 
- 
					
					
					
					
 Andere Instanzen der selben klasse können auf non public member der selben klasse aber anderer Instanzen zugreifen!?! 
 
- 
					
					
					
					
 shapeless schrieb: hmm also mein compile g++(gcc 3.4) gibt nen fehler aus. Weil es eine implizite friend deklaration auf sich selbst ist. 
 Hmm ich weiss leider nicht was der standard dazu sagt, aber ich denke das gcc recht standardkonform ist. Wäre dieser Fehler nicht, würde diese Zeile afaik ohne Wirkung sein denke ich, da friends ja nur auf private member einer Klasse zugreifen können, und eine Klasse selbst ja immer schon auf die eigenen (private) member zugreifen kann.Es ist mir unbegreiflich, warum manche Leute ihre Beträge nicht nochmal anschauen, nachdem sie sie abgeschickt haben. Dann würden sie nämlich feststellen, dass man Standard nicht mit T schreib und ihre Fehler korrigieren. 
 
- 
					
					
					
					
 THE_FreaK schrieb: Andere Instanzen der selben klasse können auf non public member der selben klasse aber anderer Instanzen zugreifen!?! Das funktioniert aber auch ohne friend. Ich kenne solch eine Verwendung von friend nur bei Template-Klassen, zB template <class T> class Foobar { template <class T1> friend class Foobar; public: ... }Bei Nicht-Template-Klassen sehe ich, wie Shade, keinen Sinn. 
 
- 
					
					
					
					
 hier 
 www.nondot.org/sabre/Mirrored/AdvProgLangDesign/finkel05.pdfunter "Challenge Exercises" gibts bei 5.17 auch die Frage: 
 "What is the effect of a C++ class declaring that it is its own friend?"Es muss einen Effekt haben, in den EMule Sourcen habe ich es auch gesehen. 
 
- 
					
					
					
					
 Hi! Das ist Inzucht. 
 
- 
					
					
					
					
 Nö isses nich oder hast du mit all deinen freunden sex ? Die kennen sich halt nur. Den einzigen vorteil den ich da sehe ist dass man schnell mal auf die attribute anderer instanzen zugreifen kann ohne getter und setter implementieren zu müssen. Aber ansonsten. class me_myself_and_i{ friend class me_myself_and_i; public: void do_sth_with_friend(me_myself_and_i &inst){ inst.attr1_ = 3; } private: int attr1_; int attr2_; //... usw. };Hab allerdings nich getestet ob das wirklich geht ... denk ich mir einfach mal. 
 
- 
					
					
					
					
 prolog schrieb: Den einzigen vorteil den ich da sehe ist dass man schnell mal auf die attribute anderer instanzen zugreifen kann ohne getter und setter implementieren zu müssen. Aber ansonsten. kann man auch so. Siehe z.B. operator=, copy-Ctor und konsorten. 
 
- 
					
					
					
					
 Aber kann man das nich nur bei diesen beiden ? Dachte ich bisher immer. Weiss ich jetzt echt nicht. 
 
- 
					
					
					
					
 @prolog: nein, das geht immer. schau: #include <iostream> class nofriend{ int secret; public: nofriend(int v=0):secret(v){} void talk_about(const nofriend& foe){ std::cout<<foe.secret<<std::endl; } }; int main(){ nofriend nf1(23), nf2; nf2.talk_about(nf1); }nf2 spricht einfach über private details von nf1, obwohl dieser garnicht sein freund ist! 
 
- 
					
					
					
					
 Ok danke, und kann mir nun auch einer den sinn erklären. Ist ja in diesem fall nicht so doll mit kapselung dann. Aber gut dass ich immer umsonst getter geschrieben hab.  
 
- 
					
					
					
					
 Was hättest du davon, wenn du nur innerhalb eines Objekts auf private Teile zugreifen kannst und nicht auf Klassenebene? 
 
- 
					
					
					
					
 tomhet schrieb: hier 
 www.nondot.org/sabre/Mirrored/AdvProgLangDesign/finkel05.pdfunter "Challenge Exercises" gibts bei 5.17 auch die Frage: 
 "What is the effect of a C++ class declaring that it is its own friend?"Es muss einen Effekt haben, in den EMule Sourcen habe ich es auch gesehen. Nein, es hat keinen. Wenn man sich das genannte pdf-Dokument ganz anschaut, so findet man als einzige Stelle, wo von friends in C++ die Rede ist, eine Tabelle auf Seite 162 (noch Kap.5). Lt. dieser Tabelle gibt es zwischen 'same' und 'friend' keinen Unterschied. 
 Ich nehme daher an, die erwartete Antwort auf obige Frage ist: "no effect"Der Comeau C++-Compiler übersetzt es zwar (ist wohl kein Fehler); liefert aber die Warnung: "witzlose friend-Deklaration"  Gruß 
 Werner
 
- 
					
					
					
					
 Kann der Comeau Compiler Deutsch? 
 
- 
					
					
					
					
 soso, dann wollten die Emule Programmierer wohl besonders witzig sein  
 
- 
					
					
					
					
 Bei welcher Klasse benutzen die es denn? 