C++ : 연산자 오버로딩(6) - 상속 구조에서의 대입 연산자
참고 : 열혈강의 C++ 프로그래밍 책
#include <iostream>
using namespace std;
class Parent
{
private:
int num1, num2;
public:
Parent(int n1 = 0, int n2 =0) : num1(n1), num2(n2)
{ }
void ShowData() { cout << num1 << ", " << num2 << endl; }
Parent& operator=(const Parent& ref)
{
cout << "Parent& operator=()" << endl;
num1 = ref.num1;
num2 = ref.num2;
return *this;
}
};
class Child : public Parent
{
private:
int num3, num4;
public:
Child(int n1, int n2, int n3, int n4)
: Parent(n1, n2), num3(n3), num4(n4)
{ }
void ShowData()
{
Parent::ShowData();
cout << num3 << ", " << num4 << endl;
}
// 유도 클래스의 대입 연산자 정의에서 기초 클래스의 대입 연산자를 호출하지 않으면
// 기촐 클래스의 대입 연산자는 호출되지 않는다.
Child& operator=(const Child& ref)
{
cout << "Second& operator=()" << endl;
// 호출해서 멤버대 멤버 복사를 하기 위함
Parent::operator=(ref);
num3 = ref.num3;
num4 = ref.num4;
return *this;
}
};
// 테스트
void Operator6()
{
Child ssrc(11, 22, 33, 44);
Child scpy(0, 0, 0, 0);
scpy = ssrc;
scpy.ShowData();
}
댓글
댓글 쓰기