Q: Pointer Basics
-
Classo* Klasse = new Classo; Classo* Super = Klasse;Wenn ich was an Super änder, änder ich dann auch "Klasse" ?
-
Tim06TR schrieb:
Classo* Klasse = new Classo; Classo* Super = Klasse;Wenn ich was an Super änder, änder ich dann auch "Klasse" ?
Um haarspalterisch zu sein, nein. Wenn Du
Super=0;oder
++Super;schreibst, hast Du nur super geändert.
Aber
(*Super).attrib=5;bzw
Super->attrib=5;ändert sowohl an *Super als auch an *Klasse, denn beide Zeiger zeigen auf ein und das selbe Objekt.
-
Pointer basics:
http://www.youtube.com/watch?v=mnXkiAKbUPg
-
Beide Pointer verweisen auf das selbe Objekt auf dem Heap.
das heißt wenn du du über den Pointer das Objekt änderst,
hast du die Auswirkungen bei beiden Pointern.
-
Und wie kopier ich die Klasse auf den "Klasse" zeigt und weise diese Kopie "Super" zu. (->elegant)
-
Tim06TR schrieb:
Und wie kopier ich die Klasse auf den "Klasse" zeigt und weise diese Kopie "Super" zu. (->elegant)
Classo Super = *Klasse;oder wenn Du auch unbedingt new verwenden willst.
edit:
Classo* Super = new Classo(Klasse);//dies war falschClasso* Super = new Classo(*Klasse);//so richtig
-
So jetzt warum ich diese Banale Frage gestellt habe (mit dieser Postanzahl ;))
Das Problem war eben das kopieren, und ich wusste, dass ich nicht einfach die Addresse übergeben darf.
Mir ist dann auch aufgefallen, wenn ich Clear aufrufe, cleared das beides (unschön).Deshalb hab ich nachgehakt. Sonst hätt ich nur rumgewurschtelt.
-
Und noch eine Frage zu dieser Meldung:
"Klassen mit Eigenschaften dürfen nicht über ihren Wert kopiert werden"
heißt ?
besonders: "über ihren Wert" Was ist der "Wert" einer Klasse (hier Array)KLASSE Words_Buffer[3]; Words_Buffer[0] = *Words[0];wie kopier ich den gesamten array, bzw was ist hier noch falsch.
(zu Words)KLASSE* Words[3]; for (i = 0; i < 3; i++) Words[3] = new KLASSE;und der new konstruktor funzt auch für Arrays (new[])
[url]http://www.cplusplus.com/reference/std/new/operator new[]/[/url]
so gefunden, aber wenn ich das unmsetze mach ich watt falsch
-
PhilippM schrieb:
Pointer basics:
http://www.youtube.com/watch?v=mnXkiAKbUPgDas gibt's aber auch nochmal in der C++ Edition mit
new intstattmalloc(sizeof(int)):
http://www.youtube.com/watch?v=i49_SNt4yfk
-
volkard schrieb:
Tim06TR schrieb:
Und wie kopier ich die Klasse auf den "Klasse" zeigt und weise diese Kopie "Super" zu. (->elegant)
Classo Super = *Klasse;oder wenn Du auch unbedingt new verwenden willst.
Classo* Super = new Classo(Klasse);1. Erste Methode über Variable geht nicht siehe Fehler oben vorletzter Post
2. Ist nur schlecht wenn der Konstruktor der Klasse einen Parameter hat
-
Tim06TR schrieb:
volkard schrieb:
Tim06TR schrieb:
Und wie kopier ich die Klasse auf den "Klasse" zeigt und weise diese Kopie "Super" zu. (->elegant)
Classo Super = *Klasse;oder wenn Du auch unbedingt new verwenden willst.
Classo* Super = new Classo(Klasse);1. Erste Methode über Variable geht nicht siehe Fehler oben vorletzter Post
Verstehe Dein "geht nicht" nicht.
Tim06TR schrieb:
2. Ist nur schlecht wenn der Konstruktor der Klasse einen Parameter hat

Das müsste übrigends
Classo* Super = new Classo(*Klasse);heißen, wenn Klasse ein Zeiger ist.
-
Tim06TR schrieb:
wie kopier ich den gesamten array, bzw was ist hier noch falsch.
(zu Words)KLASSE* Words[3]; for (i = 0; i < 3; i++) Words[3] = new KLASSE;Du meintest wohl
Words[i]stattWords[3]. Abgesehen davon sehe ich da keinen Fehler. Vielleicht gibst Du mal vollständige(!) aber kleine(!) Codebeispiele ohne Abtippfehler(!).Tim06TR schrieb:
und der new konstruktor funzt auch für Arrays (new[])

-
Ich machs jetzt anders, ohne die gesamte Klasse zu kopieren, sondern nur eine Eigenschaft.
TStringList* Words_Buffer[3]; for (i = 0; i < 3; i++) { Words_Buffer[i] = new TStringList(); for (int j = 0; j < Words[0]->Count; j++) { Words_Buffer[i]->Add(Words[i]->Strings[VecShuffle[j]]); } }