[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