다중 정의를 이용한 대입 연산자
CMyData라는 Class의 인스턴스 a와 b가 있을때 a=b 이런것을 수행하면 어떻게 될까????? 당연히 에러난다
하지만 다중정의에서 적절한 값을 넣어준다면 인스턴스간의 = 연산자가 먹힐 수 있다.
#include <iostream>
using namespace std;
class CMYData
{
public:
CMYData(int nParam)
{
m_pnData = new int;
*m_pnData = nParam;
};
CMYData(CMYData& rhs)
{
m_pnData = new int;
*m_pnData = *rhs.m_pnData;
}
CMYData& operator=(const CMYData& rhs)
{
*m_pnData = *rhs.m_pnData;
return *this;
}
~CMYData()
{
delete m_pnData;
}
int GetData(void) { return *m_pnData; };
private:
int *m_pnData = nullptr;
};
int main(void)
{
CMYData a(10);
CMYData b(20);
CMYData c(30);
cout << a.GetData() << endl;
cout << b.GetData() << endl;
cout << c.GetData() << endl;
a = b = c;
cout << a.GetData() << endl;
cout << b.GetData() << endl;
cout << c.GetData() << endl;
return 0;
};
위의 코드에서 인스턴스 끼리 a=b=c 이러고 있다. 되는 이유는 바로 CMYData& operator=(const CMYData& rhs) 이것 때문이다.
operator=은 함수 이름이고 operator+나 operator- 같은 형태로 기본 연산자를 재정의할 수 있다.
여기선 m_pnData의 값을 바꿨다 그래서 a=b=c 코드 이후엔 모든 출력값이 모두 30으로 변경된 것을 알 수 있다.
'C++' 카테고리의 다른 글
C++ 객체 생성 (0) | 2020.04.02 |
---|---|
C++ 임시객체(이동 생성자) 중요! (0) | 2020.02.07 |
C++ 깊은복사 얕은복사 (0) | 2020.02.02 |
C++ 복사 생성자(참조형 파라미터) (0) | 2020.02.01 |
C++ this 포인터 (0) | 2020.02.01 |