본문 바로가기

Programming/C++ 3

[C++] 12-01. 대입연산자 오버로딩

반응형

대입연산자 오버로딩은 객체간 대입연산

 

#include <iostream>

using namespace std;

class First
{
private:
	int num1, num2;
public:
	First(int n1 = 0, int n2 = 0) :num1(n1), num2(n2)
	{ }
	void ShowData()
	{cout << num1 << ", " << num2 << endl;}

	First& operator=(const First& ref)
	{
		cout << "First& operator=()" << endl;
		num1 = ref.num1;
		num2 = ref.num2;
		return *this;
	}
};

class Second :public First
{
private:
	int num3, num4;
public:
	Second(int n1, int n2, int n3, int n4)
		:First(n1,n2), num3(n3),num4(n4)
	{ }
	void ShowData()
	{
		First::ShowData();
		cout << num3 << ", " << num4 << endl;
	}

	Second& operator=(const Second& ref)
	{
		cout << "Second& operator=()" << endl;
		First::operator=(ref);
		num3 = ref.num3;
		num4 = ref.num4;
		return *this;
	}
};

int main(void)
{
	Second ssrc(111, 222, 333, 444);
	Second scpy(0, 0, 0, 0);
	scpy = ssrc;
	scpy.ShowData();

	return 0;
}

 

 

 

	First& operator=(const First& ref)	//First 클래스의 디폴트 대입 연산자
	{
		cout << "First& operator=()" << endl;
		num1 = ref.num1;
		num2 = ref.num2;
		return *this; 			//반환만 하는 게 아니라 참조형으로 반환
        						//연속된 대입 연산을 위한 처리
	}
    //First class 멤버 복사 대입연산자 정의

 

 

	Second& operator=(const Second& ref)
	{
		cout << "Second& operator=()" << endl;
		First::operator=(ref);			//First 클래스의대입연산자 명시적 호출
		num3 = ref.num3;
		num4 = ref.num4;
		return *this;
	}
    //Second class 멤버 복사 대입 연산자 정의
int main(void)
{
	Second ssrc(111, 222, 333, 444);
	Second scpy(0, 0, 0, 0);
	scpy = ssrc;				//First::operator=(ref)가 없으면 
    							//Second 객체의 대입연산자만 호출된다.
	scpy.ShowData();

	return 0;
}

디폴트 대입 연산자를 사용할 경우 자동 호출되므로 더 안정적으로 정의 가능

반응형