반응형
대입연산자 오버로딩은 객체간 대입연산
#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;
}
디폴트 대입 연산자를 사용할 경우 자동 호출되므로 더 안정적으로 정의 가능
반응형
'Programming > C++ 3' 카테고리의 다른 글
[C++] 15-01. 예외처리 (0) | 2021.06.09 |
---|---|
[C++] 10-01. 연산자 오버로딩의 이해와 유형 (0) | 2021.05.30 |
[C++] 09-02. 다중상속 (0) | 2021.05.30 |
[C++] 09-01. 멤버함수와 가상함수의 동작 원리 (0) | 2021.05.30 |
[C++] 08-03. 가상 소멸자 (0) | 2021.05.30 |