STL/CHAPTER 1. 연산자 오버로딩
1. 연산자 오버로딩 정의 및 사용하기
자잘
2019. 12. 27. 14:31
우리가 사용할 수 있는 연산자는 정말 다양하죠. + , - , * 등등 많습니다. 이런 연산자들은 기본 자료형에서만 사용이 가능합니다. 즉 우리가 class나 struct를 사용하여 만드는 사용자 정의형으로는 연산자를 이용할 수 없습니다. 왜냐하면 컴파일러 내부에 정의되어 있지 않기 때문입니다. 따라서 우리는 우리가 만든 자료형에 연산자를 사용하기 위하여 연산자 오버로딩을 하게 됩니다. 다음은 그 간단한 예시 입니다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<iostream> | |
using namespace std; | |
class Point | |
{ | |
int x, y; | |
public: | |
Point(int _x = 0, int _y = 0):x(_x),y(_y){ } | |
void Print() const { cout << x << ',' << y << endl; } | |
const Point operator+(const Point arg) | |
{ | |
Point pt; | |
pt.x = this->x + arg.x; | |
pt.y = this->y + arg.y; | |
return pt; | |
} | |
}; | |
int main(void) | |
{ | |
Point p1(2, 3), p2(5, 5); | |
Point p3; | |
p3 = p1 + p2; | |
p3.Print(); | |
p3 = p1.operator+(p2); | |
p3.Print(); | |
/*p1 * p2; | |
p1 = p2; | |
p1 == p2; | |
p1 += p2;*/ | |
return 0; | |
} |
사용자가 정의행 Point형 객채 p1 과 p2에 덧셈연산이 가능해졌습니다. 10 ~ 17라인까지의 연산자 오버로딩이 없었다면 불가능한 일입니다. Point 객체 두개에 덧셈 연산이 일어나게 되면 컴파일러는 Point 클래스에 정의되어 있는 operator+() 멤버 함수를 호출하게 되고 p2를 인자로 전달해 줍니다. 멤버 함수 내에서 x, y의 값을 각각 더하여 Point객체에 담아 리턴해주게 됩니다. p3는 이 객체를 받아서 자신의 멤버 변수를 설정하고 실행해주면 다음과 같이 결과가 나오게 됩니다.
