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();
}

댓글

이 블로그의 인기 게시물

C++ : Class로 만든 DLL Export 및 Import

VMware 환경에서 우분투로 안드로이드 환경 구축하기(1)