반응형
operator 연습해보기
http://www.crocus.co.kr/1193?category=278487
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #include <iostream> using namespace std; class Point { private: int x, y; public: Point(int x_ = 0, int y_ = 0) // 생성자 아무것도 없으면 0,0넣는다. { x = x_; y = y_; } void ShowPosition(); void operator+(int val); // 연산자 오버로딩 선언 }; // 클래스 함수 내용 void Point::ShowPosition() { cout << x << " " << y << endl; } void Point::operator+(int val) { x += val; y += val; } int main() { Point p(3, 4); p.ShowPosition(); p.operator+(10); p.ShowPosition(); &nbscsp;return 0; } | Crocus |
Point 클래스를 p라는 이름으로 선언해주고 생성자로 (3,4)를 넣어준다.
(3,4)를 해주지 않으면 자동으로 생성자 정의에 의해 0,0이 들어간다.
그리고 p클래스 내부의 ShowPosition함수로 x,y값을 cout하고(즉, 현재값 보여준 상태)
그다음 p.operator+(10)을 통해 연산자 오버로딩을 하였다.
이 연산자 오버로딩의 내용은
private의 x와 y에 10씩 더하라는 의미가 된다.
그리고 난 뒤, p.ShowPosition();으로 호출 하였다.
<< 멤버 함수에 의한 오버로딩 >>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <iostream> using namespace std; class Point { private: int x, y; public: Point(int x_ = 0, int y_ = 0) // 생성자 아무것도 없으면 0,0넣는다. { x = x_; y = y_; } void ShowPosition(); Point operator+(const Point& p); // 멤버 함수에 의한 연산자 오버로딩 선언 }; // 클래스 함수 내용 void Point::ShowPosition() { cout << x << " " << y << endl; } Point Point::operator+(const Point &p) { Point temp(x + (p.x), y + (p.y)); return temp; } int main() { Point p1(1, 2); // p1은 1,2로 초기화 Point p2(3, 4); // p2는 3,4로 초기화 Point p3 = p1 + p2; // p3은 p1+p2가 나오는 값(연산자 오버로딩 이용) p3.ShowPosition(); return 0; } | Crocus |
Point p3 = p1 + p2; 에서 p1 + p2를 cpp가 보게된다.
이때 p1+p2가 말이안되니
cpp는 operator+라고 생각하고 cpp는 p1.operator+(p2)라고 생각한다.
즉 후자를 인자로 생각하고 전자를 클래스에 있는 함수로 호출한다.
(p1 클래스에 있는 operator+함수에 p2를 넣어라.)
이때 Point operator+(const Point &p);에서 &는 참조이다.
즉, 여기서는 p2를 참조하여 받겠다는 의미다.
그리고 나서 Point temp라는 클래스에 생성자로(x+(p.x), y+(p.y))를 넣어준다.
즉 여기는 p1 클래스 속이니 x는 p1의 x이고 p.x는 참조받은 p2의 x이다.
그 후 temp에 있는 x,y값을 return 해주어서 그 값을 p3의 x,y에 넣는것이다.
반응형
'Basic > C++' 카테고리의 다른 글
stack 표준 템플릿 라이브러리 이용 방법 (0) | 2016.08.14 |
---|---|
스레드(thread)와 Main의 헙력 정렬 (0) | 2016.05.31 |
생성자의 필요성 및 예제(2) (0) | 2015.11.24 |
생성자의 필요성 및 예제(1) (0) | 2015.11.24 |
class 캡슐화, 정보은닉 (0) | 2015.11.23 |