[C++] 연산자 오버로딩 정의 (operator)

2019. 7. 30. 00:05 기타/C++

[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 [개발이 하고 싶어요]