C++ Überladen des Klassenmember-Zugriffsoperators ->
C++ Operatorüberladung und Funktionsüberladung
Der Klassenmember-Zugriffsoperator (->) kann überladen werden, aber er ist ziemlich problematisch. Er wird definiert, um einer Klasse ein "Zeiger"-Verhalten zu verleihen. Der Operator -> muss eine Memberfunktion sein. Wenn der Operator -> verwendet wird, muss der Rückgabetyp ein Zeiger oder ein Klassenobjekt sein.
Der Operator -> wird normalerweise in Kombination mit dem Zeiger-Dereferenzierungsoperator * verwendet, um "Smart-Pointer"-Funktionalität zu implementieren. Diese Zeiger sind Objekte, die sich wie normale Zeiger verhalten, außer dass sie andere Aufgaben ausführen, wenn Sie über den Zeiger auf ein Objekt zugreifen. Wenn beispielsweise der Zeiger zerstört wird oder wenn der Zeiger auf ein anderes Objekt zeigt, wird das Objekt automatisch gelöscht.
Der Dereferenzierungsoperator -> kann als unärer Postfix-Operator definiert werden. Das heißt, gegeben eine Klasse:
class Ptr{
//...
X * operator->();
};
ClassPtrObjekte können verwendet werden, um auf Klassen zuzugreifen.XIhre Mitglieder werden in einer Weise verwendet, die Zeigern sehr ähnlich ist. Zum Beispiel:
void f(Ptr p )
{
p->m = 10 ; // (p.operator->())->m = 10
}
Die Anweisung p->m wird als (p.operator->())->m interpretiert. Ebenso zeigt das folgende Beispiel, wie der Klassenmember-Zugriffsoperator -> überladen wird.
Beispiel
Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er die folgenden Ergebnisse:
10 12 11 13 12 14 13 15 14 16 15 17 16 18 17 19 18 20 19 21Weitere Erweiterungen