[C++ 문법] '연산자 함수(연산자 오버로딩)'
'연산자 함수'는 연산자를 이용하듯 호출할 수 있는 메서드입니다.
아래 코드를 살펴보겠습니다.
void main() { int a = 10, b = 20; a + b; // '10 + 20'으로 30이 됩니다. MyData c, d; c + d; // '사용자 정의 타입'끼리의 덧셈? }
수학적으로 봤을 때 '+' 연산자는 각각 좌, 우측의 값이 'int'형 정수인, 정수 값끼리의 덧셈입니다.
하지만, 가만히 생각해보면 '+' 연산은 굳이 숫자에만 적용할 수 있는 것이 아닙니다. 예를 들어, String 타입간의 '+' 연산은 알다시피 두 문자열이 합쳐집니다.
void main() { string a{ "Hello, " }, b{ "world" }; string c = a + b; // 'c'는 당연히 "Hello, World" 문자열이 들어갑니다. }
string 타입은 C++ STL에서 제공해주는 '문자열 컨테이너'입니다. 즉, 클래스인거죠. string 타입간의 '+' 연산이 가능한것도 'string 클래스'에서 '+' 연산자를 재정의했기 때문에 가능한 일입니다.
예제를 살펴보겠습니다.
class MyData { private: int m_nData = 0; public: // 변환 생성자 MyData(int nParam) : m_nData{ nParam } { /* do somthing */ } // 복사 생성자 MyData(const MyData& rhs) : m_nData{ rhs.m_nData } { /* do somthing */ } // 이동 생성자 MyData(const MyData&& rhs) : m_nData{ rhs.m_nData } { /* do somthing */ } // MyData -> int 형변환 연산자 정의 operator int() { return m_nData } // '+' 연산자 재정의 MyData operator+(const MyData& rhs) { return MyData{ this->m_nData + rhs.m_nData }; } // '=' 연산자 재정의 MyData& operator=(const MyData& rhs) { this->m_nData = rhs.m_nData; return *this; } } void main() { MyData a{ 10 }, b{ 20 }, c{ 0 }; c = a + b; // c.operator=(a.operator+(b)); }
클래스에 '+' 연산자와 '=' 연산자를 재정의하여 제작자가 원하는 동작을 설정할 수 있습니다.
'Programming > C C++' 카테고리의 다른 글
[C++ 문법] '소멸자 가상화' (0) | 2019.05.24 |
---|---|
[C++ 문법] '가상 함수(virtual function)' (0) | 2019.05.23 |
[C++ 문법] '이동 생성자' (0) | 2019.05.22 |
[C++ 문법] '변환 생성자' (0) | 2019.05.21 |
[C++ 문법] '복사 생성자' (0) | 2019.05.20 |
댓글
이 글 공유하기
다른 글
-
[C++ 문법] '소멸자 가상화'
[C++ 문법] '소멸자 가상화'
2019.05.24 -
[C++ 문법] '가상 함수(virtual function)'
[C++ 문법] '가상 함수(virtual function)'
2019.05.23 -
[C++ 문법] '이동 생성자'
[C++ 문법] '이동 생성자'
2019.05.22 -
[C++ 문법] '변환 생성자'
[C++ 문법] '변환 생성자'
2019.05.21
댓글을 사용할 수 없습니다.