#include <iostream>
using namespace std;
class Point {
int xPos;
int yPos;
public:
Point(int x, int y)
: xPos(x), yPos(y) {}
void showPosition() const {
cout << "[" << xPos << ", " << yPos << "]" << endl;
}
Point& operator++() {
xPos += 1;
yPos += 1;
return *this;
}
friend Point& operator--(Point& ref);
};
Point& operator--(Point& ref) {
ref.xPos -= 1;
ref.yPos -= 1;
return ref;
}
int main() {
Point pos(10, 10);
++(++(++pos));
pos.showPosition();
--(--(--pos));
pos.showPosition();
return 0;
}
전위연산은 참조객체를 넘겨 중첩된 결과가 나올 수 있게 한다.
전위 연산 : ++pos -> pos.operator++()
후위 연산 : pos++ -> pos.operator++(int)
#include <iostream>
using namespace std;
class Point {
int xPos;
int yPos;
public:
Point() {}
Point(int x, int y)
: xPos(x), yPos(y) {}
void showPosition() const {
cout << "[" << xPos << ", " << yPos << "]" << endl;
}
const Point operator++(int) {
const Point obj(xPos, yPos);
xPos += 1;
yPos += 1;
return obj;
}
friend const Point operator--(Point& ref, int);
};
const Point operator--(Point& ref, int) {
const Point obj(ref);
ref.xPos -= 1;
ref.yPos -= 1;
return obj;
}
int main() {
Point pos(10, 10);
Point cpy;
cpy = pos++;
cpy.showPosition();
pos.showPosition();
cpy = pos--;
cpy.showPosition();
pos.showPosition();
return 0;
}
이렇게 하는 이유는 C++의 후위연산의 특성을 그대로 반영한 결과이다.
int main() {
int num = 10;
(num++)++; // 컴파일 에러
return 0;
}