URL: https://www.overclockers.at/coding-stuff/operator_overloading_in_c_53657/page_1 - zur Vollversion wechseln!
Hi!
Ich bin mit Operator-Overloading leider noch nicht so vertraut, deshalb hier meine Frage:
Das Overloading funktioniert doch nur bei Objekten, die nicht mit new erzeugt worden sind bzw nur dann, wenn man bei einem mit new erzeugten Objekt vorher den Pointer, der auf das Objekt zeigt, dereferenziert. Hab ich das richtig verstanden? ein bsp:
class Lock
{
Lock (...)
Lock& operator=(const Lock& rhs)
{
// some code that modifies Lock::this
}
...
};
int main() {
Lock *lock1 = new Lock();
Lock *lock2 = lock1;
}
In diesem Beispiel hab ich ja Pointer auf meine locks, dh der Assignment
Operator, den ich neu definiert hab, kommt gar nie zum Zug, oder?
Und jetzt die ultimative Frage:
Gibt es eine Moeglichkeit, dass man den Assignment Operator so ueberlaedt,
dass er auch bei Pointern auf das Objekt irgendwas machen kann (zb den
Pointer, auf den zugewiesen wird, dereferenzieren und das Objekt dahinter
veraendern kann)?
Ich hoffe, irgendwer hat mein Problem verstanden - wenn nicht, sagts es mir
bitte, dann probier ichs nochmal zu beschreiben 
Und vielleicht hat ja irgendwer eine Antwort auf meine Frage!
Schon imn voraus ein grosses Dankeschoen!
alex
Du kannst nur statt dem Pointer eine eigene Klasse verwenden, der du mit Operator Overloading in den meisten Bereichen Pointer-Semantik beibringen kannst. auto_ptr ist z.B. sowas.
Oder du dereferenzierst einfach deine Pointer. 
Zitat von lexatorDas Overloading funktioniert doch nur bei Objekten, die nicht mit new erzeugt worden sind bzw nur dann, wenn man bei einem mit new erzeugten Objekt vorher den Pointer, der auf das Objekt zeigt, dereferenziert. Hab ich das richtig verstanden?
Zitat von RingdingWie ein Objekt erzeugt wurde, ist völlig egal.
Code:class C { ... }; void bla() { C a; C& b = *new C(); }
hehe ... des is nett ...
Aber es ging darum ein Objekt über einen Pointer dynamisch zu erzeugen, was dein Code nicht macht. Denn wenn du schreibst C *b = new C(); macht das sehr wohl einen Unterschied.
Und nochma zum Problem von Lexator : Ich denkma mit "friend" müsste es funzen, wenn er 2 Pointer von Datentyp "*Lock" in die Funktion liefert.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026