Ruft die Operation auf "diesem" Zeiger den Konstruktor auf?
Ich habe einen Konstruktor wie folgt definiert
%Vor%in der Hauptfunktion habe ich etw so ...
%Vor% Nun, wenn ich eine Operation wie *this = *this + 1
mache.
Es ruft diesen Konstruktor zweimal auf.
Was genau hier vorgeht. Erstellt *this
ein temporäres Objekt und weist den Wert dem ursprünglichen Objekt zu?
Nein, Dereferenzierung eines Zeigers erstellt kein neues Objekt .
Wenn Sie operator+
nur für Instanzen Ihrer Klasse definiert haben, wird eine neue Instanz aus 1
erstellt, weil der Konstruktor Cents(int cents)
nicht als explizit markiert ist .
Sie haben eine ganze Reihe von Konflikten hier!
%Vor% Diese Zeile ruft Cents::Cents()
auf, das vom Compiler synthetisiert wird und möglicherweise nicht das tut, was Sie wollen.
Dann rufst du an:
%Vor% Gibt ein Objekt zurück und ruft explizit Cents::Cents(int)
auf.
Dann machst du deine seltsame Aufgabe, die den zweiten Aufruf von Cents::Cents(int)
für das zweite Argument macht.
Wenn Sie Cents operator+(const Cents&, const Cents&)
aufrufen, konstruieren Sie explizit ein neues Cents::Cents(int)
und geben eine Kopie davon zurück ...
Dann rufst du die synthetisierte Cents& Cents::operator=(const Cents&)
an, die wiederum nicht das tut, was du willst.
Ein typischer Post-Inkrement-Operator würde so aussehen:
%Vor%Beachten Sie, wie der Wert der Klasse vor dem Inkrement zurückgegeben wird, indem Sie den Kopierkonstruktor (und nicht eine Überschreibung) aufrufen und auch, wie er die Elemente der Klasse einzeln inkrementiert.
Tags und Links c++