나는 다른 연산자를 오버로딩하고 무슨 일이 일어나고 있었는지 지켜보기 위해 print 문을 추가했다. 게시물 증가 연산자를 오버로드 할 때 생성자가 두 번 호출되는 것을 보았습니다. 그러나 이유를 이해할 수 없습니다.왜 C++에서 포스트 증가 연산자를 오버로드하면 생성자가 두 번 호출됩니까?
#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 ** - increment 연산자를 오버로드하지만 ** pre ** - increment를 구현합니다. –
@PeteBecker 아마도 내가 뭔가를 놓치고 있습니다. 필자는 ++ 연산자 (int)에 'int'매개 변수를 추가하면 게시 증분을 구현할 수 있다고 생각 했습니까? – yamex5
코드는 증가 된 값을 반환합니다. 이것이 바로 사전 증가입니다. 후행 증가는 원래 값을 반환해야합니다. –