Pointer und Klassen-Rückgabewerte
-
Wer kann mir folgenden Zusammenhang erklären:
class A { };
A& A::Method()
A* A::Method2()
Was genau bewirken Referenzen und Pointer der Klasse?
Danke.
-
Das sind Rückgabewerte von Methoden der Klasse A.
Method gibt eine A-Referenz zurück.
Method2 gibt einen A-Pointer zurück.~Edit: Italic Tags~
-
Was bedeutet eine A-Referenz genau? Eine Referenz auf die Klasse A?
Wozu dient das in der Praxis?Wie müssen die return-Werte in der Methode aussehen?
-
Sunset schrieb:
Was bedeutet eine A-Referenz genau? Eine Referenz auf die Klasse A?
Mit A-Referenz meine eine Referenz auf eine Instanz einer A-Klasse:
class A{ ... }; A meineAInstanz; A &meineAReferenz = meineAInstanz;
Sunset schrieb:
Wozu dient das in der Praxis?
Referenzen generell oder die Methoden? Bei Methoden siehe unten.
Sunset schrieb:
Wie müssen die return-Werte in der Methode aussehen?
A& A::Method() { return *this; // Gibt die aktualle Instaz als Referenz zurück, // dammit kann man z.B. Methodenaufrufe verketten. // Siehe unten. // Oder: static A globaleAInstanz; // So kann man z.B Singletons erzeugen. return globaleAInstanz; } A* A::Method() { return this; // Das gleiche wie bei der Referenz-Version, // nur eben als Pointer. // Oder: return new A; // Oder: static A globaleAInstanz; // Das gleiche wie bei der Referenz-Version, return &globaleAInstanz; // nur eben als Pointer. }
So könnte man dann die Methoden verkettet aufrufen:
A meinA; meinA.Method().Method().Method(); // Usw... // Ist das gleiche wie: A meinA; meinA.Method(); meinA.Method(); meinA.Method(); // Usw ...
-
Sunset schrieb:
Was bedeutet eine A-Referenz genau? Eine Referenz auf die Klasse A?
Eine Referenz auf eine Instanz der Klasse A.
Sunset schrieb:
Wozu dient das in der Praxis?
u.a.
* Vermeidung von teuren Kopien (A A::Method())
* Öffnung der Schnittstelle zur direkten Manipulation von Klassenmembern
* Bei Eigenverweisen: Möglichkeit der Verkettung, bspw. my_a.Method().Method().Method();Sunset schrieb:
Wie müssen die return-Werte in der Methode aussehen?
Kommt drauf an, was die Methode machen soll. Wenn es sich um Eigenverweise handeln soll, dann
A& A::Method() { return *this; } A* A::Method() { return this; }