Klasse mit OperatorÜberladung/Code lesen
-
Liebe Freunde! Klassen sind für mich ziemlich neu. Es mangelt noch am Verständnis. Zeiger haben wir nur im Zusammenhang mit "this Objekt" besprochen. Da ist ein sample einer Testaufgabe. Habe zwei Fragen diesbezüglich: [code="cpp"] #include <iostream> using namespace std; class X { public: int x; X(int x=4) : x{x} { } void print() {cout << x;} int operator+(X rop) { return x+rop.x;/* 1)der this-> sollte nach Aufruf von int operator+(X rop) auf +x im main zeigen. Warum? (hier demnach x=13) 2)rop.x verstehe ich gar nicht: wo wurde das Objekt rop geschaffen? oder bedeutet diese Schreibweise etwas anderes. (Ich dachte Variable x aus Objekt rop: also nach dem Schema objekt.variable).(hier rop.x=4 also aus dem Konstruktor)*/ } X operator+() { return X(9 + x); } }; X operator+(int n, X x) { return X{n*n + x.x}; } int main() { X x; cout << +x + x; x.print(); return 0; }
-
Du hast mehrere +-Operatoren.
Einmal den unären
X operator+()
. Also bei sowas wie +42 oder so. Normalerweise tut der nix. Bei dir ist aber gibt +x ein neues X-Objekt mit einem 9 höheren Wert zurück. Also so ähnlich wie +10 = 19.Dann hast du den
int operator+(X rop)
. Der wird aufgerufen, wenn links vom Plus-Zeichen ein X steht und rechts auch. rob steht vermutlich für "right operand". Also eben das X rechts vom Plus. Wenn du also zwei X-Objekte x1 und x2 hast undx1 + x2
schreibst, wird also x1.x + x2.x gerechnet und zurückgegeben.Alles klar?