3 Stimmen

Operatorüberladung ( & -> )in C++

Ich habe einige grundlegende Fragen zur Operatorüberladung in C++.

Ich lese gerade "Thinking in C++, Band 1" und dort steht, dass Operatoren, die nicht überladen werden können, der Member Selection Operator . und der Operator zur Dereferenzierung von Mitgliedern *. Es sieht also so aus, als ob andere Operatoren überladen werden können

Kann ich den Betreiber überlasten? Aber wird dies den Compiler nicht verwirren, wenn ich ihn als Präfix-Operator implementiere, oder verbirgt er dann seine Standardbedeutung?

Im Code, um auf öffentliche Mitglieder zu verweisen, mache ich etwas wie ptr -> data_member

Ich verstehe, dass Compiler kümmert sich um es und bindet diese Referenz mit dem Datenelement, so dass dies überhaupt nicht zur Laufzeit gesehen wird und -> kommt nicht über als Operator zur Laufzeit. Ist dieses Verständnis richtig?

Nebenbei bemerkt existiert das virtuelle Konzept nur für Memberfunktionen und nicht für Data Members, richtig? Wenn also zur Laufzeit ein Basiszeiger auf eine abgeleitete Klasse zeigt, kann ich von diesem Zeiger aus nicht auf Mitglieder der abgeleiteten Klasse zugreifen?

Kann ich den Operator -> überladen? Aber wird das den Compiler nicht verwirren, wenn ich ihn als Präfix-Operator überlade?

Wenn die Frage nicht richtig formuliert ist, lassen Sie es mich wissen.

Gibt es für jede Klasse eine eingebaute Überladung von Operatoren durch den Compiler?

9voto

Rocky Pulley Punkte 21329

Überladungsoperator -> ist sehr nützlich, insbesondere bei der Erstellung einer Smart-Pointer-Klasse.

5voto

MGZero Punkte 5634

Das Überladen eines Operators ist dasselbe wie das Überladen einer anderen Funktion. Der Compiler weiß anhand der von Ihnen angegebenen Parameter, was zu verwenden ist. Also, nein, der Compiler wird nicht verwirrt. Sie hingegen könnten verwirrt werden. Dies ist einer der Gründe, warum viele Programmierer davon abraten, Operatoren zu überladen (je nach Fall stimme ich dem nicht zu).

0voto

Alan Punkte 44139

Erinnern Sie sich, dass der Operator& zwei Bedeutungen hat: bitweises und und Adresse von. Ebenso können Sie den Operator* als Multiplikation überladen, aber nicht für Zeiger.

Was die Verwirrung des Compilers angeht, so geben alle modernen C++-Compiler einen Compilerfehler aus, wenn Sie etwas tun, das mehrdeutig ist.

Und nur weil man einen Operator überladen kann, heißt das nicht, dass man das auch tun sollte; es ist wirklich einfach, einige Operatoren zu vermasseln und alle möglichen schwer zu findenden Fehler zu verursachen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X