PhOen1X Geschrieben 11. Februar 2002 Geschrieben 11. Februar 2002 Hi Leutz !!! Hab vor ner Woche angefangen mit dem Buch "Practical C++ programming" ( O' Reilly Verlag ) C++ zu lernen. Bin dabei auf friends gestoßen. Nur leider weiß ich net wie mann diese "Freunde" verwendet. Hatt da jmd von euch Plan? Hier mal mein Proggie: #include <iostream.h> class menue { private: int return_value; public: int execute_menue (void) { cout << " ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±" << '\n'; cout << " ± ±" << '\n'; cout << " ± Well if you think youself smart enter an int ±" << '\n'; cout << " ± ±" << '\n'; cout << " ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±" << '\n'; cout << "\nI_AM_A_PROMPT> "; cin >> return_value; return( return_value ); } friend int i_am_a_friend_of_menue(int return_value); }; /*******************************************\ * * * class menue --- callin execute_menue * * -> gettin the int return_value * * * * printing private var withi_am_a_friend... * * * \*******************************************/ // **** do I need this prototype ? ***** int i_am_a_friend_of_menue(int a); void main() { // creatin an instance of class menue member; // callin return_value with instance cout << i_am_a_friend_of_menue( member.execute_menue() ); // printing return_value with i_am_a_friend_of_menue cout << "\nNow return_value will printed with a_friend_of_menue\n"; // how the fuck can i call the friend ??? cout << i_am_a_friend_of_menue( ??? ); } int i_am_a_friend_of_menue(int return_value) { return return_value; } Hat jmd. vielleicht Bsp. Prog. zu friends ??? Wäre nett, wenn er mir dies mailen könnte. THX PhOeniX Zitieren
PhOen1X Geschrieben 11. Februar 2002 Autor Geschrieben 11. Februar 2002 Hier mal ein Bsp. Programm, daß ich gefunden habe. Kappier ja eigentlich alles, bis auf --- demo& --- Was bedeutet bitte der Adress-Operator nach ner Variable? /* Friend.cpp Friends */ #include <iostream> using namespace std; class demo { private: int wert; friend int func(demo&); // Friend-Deklaration }; int func(demo& objekt) { objekt.wert = 111; return objekt.wert; } int main() { class demo d; cout << func(d); return 0; } Zitieren
hoagi Geschrieben 11. Februar 2002 Geschrieben 11. Februar 2002 Das ist in dem Fall kein Adressoperator sondern ein Referenz operator. Der Funktion wird als Parameter eine Reference auf Objekt vom Typ demo übergeben. Es wird also nicht wie beim normalen call by Value der Wert des Objektes( also ne Kopie des Objekts) sondern das Objekt selber übergeben. Zwei Gründe hierfür: Erstens die Aufgerufende Funkktion kann das Objekt des Aufrufers ändern ( wenn erwünscht ). Zweitens wenn du mit großen Objekten ( viele Elemente in einer Klasse ) arbeitest kann es sein daß du eine große Menge von Daten auf den Stack kopieren mußt um ein Objekt als Wert zu übergeben. Zudem werden bei Kopieren die Elemente Memberweise kopiert ( das heist es wird nicht einfach der Speicherbereich kopiert ). Dadurch kann die ganze Sache auch sehr zeitintensÃv werden, denn es werden nicht nur die Kopierfunktionen des eigentlichen Objekts aufgerufen sondern auch von seinen Membern. Also Demo * pD = &d ; // in dem Fall ist & Adressoperator Demo &rD = d; // In dem Fall dient & als Referenzoperator Nich verwechseln. Hoagi Zitieren
PhOen1X Geschrieben 12. Februar 2002 Autor Geschrieben 12. Februar 2002 Danke für die präzise Erklärung. Denke ich habs verstanden --- Ich muß halt noch a bissl üben --- Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.