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
'LANG > C++' 카테고리의 다른 글
[C++]10-3.교환법칙 문제의 해결 (0) | 2023.05.18 |
---|---|
[C++]10-2.단항 연산자의 오버로딩 (0) | 2023.05.18 |
[C++]08-3.가상 소멸자와 참조자의 참조 가능성 (0) | 2023.05.16 |
[C++]08-2.가상함수(Virtual Function) (1) | 2023.05.16 |
[C++]프로그래머스 정수 내림차순으로 배치하기 (0) | 2023.05.14 |