Was ist "operator- ()" in C ++?

8

Ich stieß auf einen C ++ - Code, der so etwas wie operator- & gt; () hat. Unten ist das Code-Snippet, sollte jemand es bitte erklären.

%Vor%

Bitte beachten Sie, dass root_ Objekt einer anderen Klasse ist, für die der vollständige Code nicht verfügbar ist.

BEARBEITEN: Ich habe gerade den Code untersucht und festgestellt, dass root_ eine benutzerdefinierte Implementierung eines intelligenten Zeigers ist. Es hat Operator - & gt; überladen, um den intelligenten Zeiger zu dereferenzieren und den Wert des tatsächlichen Zeigers zu erhalten.

    
Haider 08.06.2013, 13:35
quelle

4 Antworten

11

Wenn Sie ein Objekt haben, können Sie über object.attr auf seine Attribute zugreifen. Wenn Sie einen Zeiger haben, können Sie auf die Attribute von auf das Objekt zugreifen, auf das er zeigt , indem Sie den Operator -> wie folgt verwenden: ptr->attr .

Bisher ist dies das Standardverhalten in C. Der Operator -> kann jedoch überladen werden - d. h. überschrieben werden wie jede andere Funktion. Sie können Ihr eigenes Verhalten für eine Klasse definieren, so dass object-> bedeutet, was immer Sie wollen. Ich glaube jedoch nicht, dass in diesem Zusammenhang der Betreiber überlastet war. Die seltsame Syntax ist, weil Sie das nicht einfach tun können:

%Vor%

Da auf den Operator -> etwas folgen muss. Der Weg dazu besteht darin, den expliziten Namen ohne Zucker für diese Funktion, d. H.% Co_de%, zu verwenden und ihn wie eine Funktion (daher die Klammer) zu bezeichnen.

Also:

%Vor%

Die Bedeutung dieser Zeile lautet: "true, wenn das Objekt mit dem Objekt auf der linken Seite übereinstimmt. oder wenn unsere operator-> -Attribute auf Objekte zeigen, die untereinander gleich sind.".

    
Amir Rachum 08.06.2013, 13:49
quelle
4

Was Sie fragen, heißt Struktur-Dereferenzierungsoperator : T::operator ->(); Es kommt von markiert sind, und in kann es überladen werden.

Er wählt ein Element durch einen Zeiger aus und verwendet in der Art, wie es in Ihrem Beispiel verwendet wird, einfach die Adresse der Instanz ( root_ ).

Die Adresse wird dann verwendet, um die Identität der Instanzen zu vergleichen (stimmen die Adressen überein?)

    
emesx 08.06.2013 13:52
quelle
0

Dies ist der Aufruf der Überladung des -> -Operators der Klasse.

    
Thomas Ruiz 08.06.2013 13:37
quelle
0

Normalerweise gibt operator- & gt; () einen Zeiger zurück, so dass dieser Code nur zwei Zeiger vergleicht. Ich denke, es ist eine verkettete Liste Implementierung, und Operator == vergleicht Zeiger auf die gesamte Liste und Zeiger auf Kopf (Root) -Element

    
Evgeny Eltishev 08.06.2013 13:40
quelle

Tags und Links