[C++] 연산자 오버로딩 정의 (operator)
[C++] 연산자 오버로딩 정의 (operator)
C++ 에서 클래스는 operator 를 사용하여 연산자를 오버로딩해 재정의 할 수 있다.
재정의된 연산자를 사용하여 클래스 끼리의 연산을 할 수 있다.
* operator+() : 덧셈 연산자로, 해당 메소드를 오버라이딩 하면 클래스끼리 + 연산시에 동작한다.
* operator++() : 단항 연산자 오버로딩, ++ 와 같은 단항 연산자를 오버로딩한다.
operator++() : 전위 연산, operator++(int) : 후위 연산
#include <iostream> using namespace std; class Point{ int x; int y; public: Point(int _x = 0, int _y = 0) :x(_x), y(_y){ } void print() const { cout << x << "," << y << endl; } // + 연산 const Point operator+(Point& arg) const{ Point pt; pt.x = this->x + arg.x; pt.y = this->y + arg.y; return pt; } // 전위 ++ const Point& operator++(){ ++x; ++y; return *this; } // 후위 ++ 후위 연산은 ++ 하기 전의 클래스를 반환해야 한다. const Point operator++(int){ Point tmp = *this; ++*this; return tmp; } }; int main(){ Point p1(2, 3), p2(5, 5); Point p3; p3 = p1 + p2; p3.print(); p3 = p1.operator+(p2); p3.print(); Point result; result = ++p1; p1.print(); result.print(); result = p2++; p2.print(); result.print(); return 0; } |
결과 :
7,8
7,8
3,4
3,4
6,6
5,5
Point 클래스 p1과 p2가 + 연산자로 연산하면서 Point 클래스의 operator+() 메소드가 동작하고 새로 생성된 Point 객체를 반환한다.
operator-(), operator*(), operator/() 도 마찬가지로 오버라이딩 하여 재정의가 가능하다.
단항 연산자(++) 도 전위 후위 연산을 오버라이딩 하여 재정의 한다.
후위 연산은 현재 객체를 반환하고, +1 을 시켜주기 때문에 고려해야 한다.
operator--(), operator--(int) 도 마찬가지로 동작한다.
출처: https://hyeonstorage.tistory.com/311?category=601868 [개발이 하고 싶어요]
'기타 > C++' 카테고리의 다른 글
[C++] 함수 템플릿 사용 template<typename T> (0) | 2019.07.30 |
---|---|
[C++] 함수객체 기본 예제 (0) | 2019.07.30 |
[C++] 생성자 타입변환과 explicit (0) | 2019.07.30 |
[C++] 스마트 포인터, operator*(), operator->() 연산자 오버로딩 (0) | 2019.07.30 |
[C++] 파일 쓰기 예제 ofstream (0) | 2019.07.30 |
[C++] LinkedList 구현하기 예제 (0) | 2019.07.30 |
[C++] 왜 포인터는 하나의 타입밖에 가리킬 수 없는가? (0) | 2019.07.27 |
[C++] 비트 연산과 쉬프트 (>>, <<) (0) | 2019.07.27 |