반응형
이전 포스팅의 내용이 기억이 안 나므로 책을 처음부터 공부하기로 결정함.
#includeusing namespace std; //직접 정의한 클래스 class Point { int x; int y; public: void Print() const // const 함수: 함수 안에서 멤버 변수의 값을 변경할 수 없음을 의미 { //const 함수 내에서는 const 함수만 호출할 수 있다. cout << "(" << x << "," << y << ")"; } public: Point operator+ (Point arg) { //cout << "\noperator+ () 함수호출" << endl; Point ret; ret.x = this->x + arg.x; ret.y = this->y + arg.y; return ret; } //아래의 const는 리턴값을 바로 변경할 수 없다는 뜻이다. // (p3++) + p2 같은 식으로 쓸 수 없다는 뜻 const Point operator-- () //전위 --연산자 { --x; --y; return (*this); } //후위 연산자라고 자동으로 우리가 생각되는 방식으로 작동하진 않는다. //그러므로 후위연산자를 구현하기 위해서 원래 값을 따로 저장해뒀다가 그 값을 리턴해주자. const Point operator-- (int) //후위 --연산자 { Point tmp = *this; --(*this); return tmp; } public: //생성자 정의 Point(int _x = 0, int _y = 0) : x(_x), y(_y) { } }; int main() { //int n1 = 10, n2 = 20; //cout << n1 + n2 << endl; // 정의되어 있는 연산 Point p1(1, 1); Point p2(2, 2); //p1 + p2;는 p1.operator+(p2); 와 같다. 즉 연산자도 특수한 형태의 함수라는 것. Point p3 = p1 + p2; //연산이 정의되어 있지 않으면 에러가 난다. cout << "p3"; p3.Print(); cout << endl; Point p4(4, 4); Point p5(5, 5); //함수 형태로 직접 호출하기. Point p6 = p4.operator+(p5); cout << "p6"; p6.Print(); cout << endl; cout << endl; Point p7 = --p3; cout << "\nPoint p7 = --p3;"; cout << "\np7"; p7.Print(); cout << "\np3"; p3.Print(); cout << endl; Point p8 = p6--; cout << "\nPoint p8 = p6--;"; cout << "\np8"; p8.Print(); cout << "\np6"; p6.Print(); cout << endl; return 0; }
반응형