Verständnisproblem Referenzen
-
Hallo, hab ein Verständnisproblem mit Referenzen.
Hier mal ein Beispiel:#include <iostream> using namespace std; class foo { private: string foo_name; public: void set_name(string &name) { foo_name=name; } string &get_name() { return foo_name; } }; foo test[2]; int main(int argc, char* argv[]) { string a; a="Juergen"; test[0].set_name(a); a="Heinz"; test[1].set_name(a); cout << test[0].get_name() << endl << test[1].get_name(); getch(); return 0; }Ich habe dort im main den "string a" der irgendwo im Speicher liegt.-)
Dann übergebe ich mit der Methode "set_name" eine Referenz auf "string a" und weise somit "foo_name" vom Objekt "foo[0]" auf die Adresse im Speicher wo "string a" (main) liegt.
Dann ändere ich "string a" und mache das selbe bei "foo[1]".
Ich übergebe doch beide male die Adresse von "string a".Dann müssten doch in beiden Objekten in "foo_name" der Name "Heinz" stehen, oder ????
Hoffe hab mich halbwegs verständlich ausgedrückt.
-
das siehst du glaube ich nicht richtig, da du zwar eine Referenz übergibst, aber string den Zuweisungs-operator überschreibst sodass:
string a,b; a = "hallo"; b = a;b enthält jetzt den Inhalt von a, aber b ist immer noch ein eigenes Objekt mit einer eigenen Addresse im Speicher. Würde die String-Klasse den Zuweisungsoperator nicht überschreiben, würde es zu einen memory-leak kommen, also das objekt b würde nicht zerstört werden.
-
Hallo
du müßtest also auch innerhalb der Klasse mit Referenzen bzw. Pointern arbeiten, nicht nur als Übergabeparameter.
bis bald
akari