私は、さまざまな演算子のオーバーロードを行っていて、何が起きているかを見るためにprintステートメントを追加しました。ポストインクリメント演算子がオーバーロードされたとき、コンストラクタが2回呼び出されているのがわかりましたが、理由はわかりません。なぜC++でポストインクリメント演算子のオーバーロードがコンストラクタを2回呼び出すのですか?
#include <iostream>
using namespace std;
class ParentClass {
public:
ParentClass() {
cout << "In ParentClass!" << endl;
}
};
class ChildClass : public ParentClass {
public:
int value;
ChildClass() { }
ChildClass(int a)
: value(a) {
cout << "In ChildClass!" << endl;
}
int getValue() { return value; }
ChildClass operator++(int) {
cout << "DEBUG 30\n";
this->value++;
return this->value;
}
};
int main() {
cout << "DEBUG 10\n";
ChildClass child(0);
cout << "value initial = " << child.getValue() << endl;
cout << "DEBUG 20\n";
child++;
cout << "DEBUG 40\n";
cout << "value incremented = " << child.getValue() << endl;
}
このコードを実行した後、出力は次のようになります。
DEBUG 10
In ParentClass!
In ChildClass!
value initial = 0
DEBUG 20
DEBUG 30
In ParentClass!
In ChildClass!
DEBUG 40
value incremented = 1
コードは** post ** - インクリメント演算子をオーバーロードしますが、** pre ** - インクリメントを実装することに注意してください。 –
@PeteBecker多分私は何かが欠けている。私は、演算子++(int)でパラメータ 'int'を追加すると、ポストインクリメントが実装されると思いましたか? – yamex5
コードはインクリメントされた値を返します。これがプリインクリメントの機能です。ポストインクリメントは元の値を返す必要があります。 –