LANG/C++

[C++]10-1.연산자 오버로딩의 이해와 유형

혀니리리 2023. 5. 18. 13:06
728x90

1.operator+라는 이름의 함수

#include <iostream>
using namespace std;

class Point
{
private:
	int xpos, ypos;
public:
	Point(int x = 0, y = 0):xpos(x), ypos(y)
    { }
    void ShowPosition() const
    {
    	cout << '[' xpos << "," << ypos << ']' << endl;
    }
    Point operator+(xpos+ref.xpos, ypos + ref.ypos)
    {
    	Point pos(xpos + ref.xpos, ypos + ref.ypos);
        return pos;
    }
};

int main(void)
{
	Point pos1(3, 4);
    Point pos2(10, 20);
    Point pos3=pos1.operator+(pos2);
    
    pos1.ShowPosition();
    pos2.ShowPosition();
    pos3.ShowPosition();
    return 0;
}

결과)

[3, 4]

[10, 20]

[13, 24]

#include <iostream>
using namespace std;

class Point
{
//앞과 같음
};

int main(void)
{
	Point pos1(3, 4);
    Point pos2(10, 20);
    Point pos3=pos1 + pos2;
    
    pos1.ShowPosition();
    pos2.ShowPosition();
    pos3.ShowPosition();
    return 0;
}

결과)

[3, 4]

[10, 20]

[13, 24]

 

이를 보면

Point pos3 = pos1 + pos2;Point pos3 = pos1.operator+(pos); 는 같다는 것 알 수 있음.

이것이 연산자 오버로딩. 기존의 연산자(+, -, = , / , %)를 재정의!!!!!!!!!!!!!!

 

연산자를 오버로딩하는 두가지 방법

1)멤버함수에 의한 연산자 오버로딩 => pos1 + pos2 == pos1.operator+(pos2);

2)전역함수에 의한 연산자 오버로딩 => pos1 + pos2 == operator+(pos1, pos2);

 

연산자를 오버로딩 하는데 있어서의 주의사항

1)본래의 의도를 벗어난 형태의 연산자 오버로딩은 좋지 않음.

2)연산자의 우선순위와 결합성은 바뀌지 않음

3)매개변수의 디폴트 값 설정 불가능

4)연산자의 순수 기능까지 뺏을 수는 없음

 

728x90