다중 정의를 이용한 대입 연산자

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

+ Recent posts