Es wäre sehr nützlich, die überladen zu können. Operator in C ++ und geben Sie einen Verweis auf ein Objekt zurück.
Sie können überladen operator->
und operator*
aber nichtoperator.
Gibt es dafür einen technischen Grund?
c++
operator-overloading
Ferruccio
quelle
quelle
operator.
undoperator.*
es gibt einige Beispiele..
sind erlaubt, also vielleicht ein kluger, aber entsetzlicher dynamischer Versand-Hack, der es erlaubt, Punktprodukte als auszudrückenmatrix1 . matrix2
.Antworten:
Siehe dieses Zitat von Bjarne Stroustrup :
quelle
operator .
operator.
ist eine explizite Parallele zuoperator->
. Und wie können Sie die Auflösung überladen?Stroustrup sagte, C ++ sollte eine erweiterbare, aber nicht veränderbare Sprache sein.
Der Punktoperator (Attributzugriff) wurde als zu nahe am Kern der Sprache angesehen, um eine Überladung zu ermöglichen.
Siehe Das Design und die Entwicklung von C ++ , Seite 242, Abschnitt 11.5.2 Smart References .
Das "Ich" in diesem Zitat ist Bjarne Stroustrup. Sie können nicht maßgeblicher sein.
Wenn Sie C ++ wirklich verstehen wollen (wie in "Warum ist das so?"), Sollten Sie dieses Buch unbedingt lesen.
quelle
Stroustrup hat eine Antwort auf diese Frage :
quelle
Es ist sehr leicht zu verstehen, wenn Sie den internen Mechanismus des Aufrufs von Operatorfunktionen durchlaufen. Angenommen, ein Klassenkomplex kann zwei Elemente r für den Realteil und i für den Imaginärteil haben. Sagen wir Komplex C1 (10,20), C2 (10,2) // wir nehmen an, dass es innerhalb der Klasse bereits einen Konstruktor mit zwei Argumenten gibt. Wenn Sie nun C1 + C2 als Anweisung schreiben, versucht der Compiler, die überladene Version des Operators + für eine komplexe Zahl zu finden. Jetzt nehmen wir an, dass ich + Operator überlade, also C1 + C2 intern übersetzt als c1.operator + (c2) Nehmen wir nun für die Zeit an, dass Sie 'überladen können.' Operator. Denken Sie nun an den folgenden Aufruf C1.disp () // Inhalt eines komplexen Objekts anzeigen Versuchen Sie nun, als interne Darstellung darzustellen C1.operator. (------) , völlig unordentliche Dinge erstellt. Das ist der Grund, warum wir nicht überladen können. Operator
quelle
operator.