프로그래밍(Programming)/c++, 11, 14 , 17, 20
상속의 복사생성자
알 수 없는 사용자
2016. 11. 6. 16:36
자식 클래스에서 특별히 필요하지 않으면 복사 생성자를 생성하지 않고 디폴트 복사 생성자를 이용할 수 있다. 컴파일러는 복사 생성자가 정의되지 않으면 알아서 디폴트 복사 생성자를 생성한다. 그러나 깊은 복사를 위해 직접적으로 복사 생성자를 정의한다고 할 때, 자식 클래스에서 부모 클래스의 복사 생성자를 명시적으로 호출해주지 않을 경우 부모 클래스의 멤버에 대해 복사 생성자가 호출되지 않고 디폴트 생성자가 호출되는데 그친다.
#include <iostream>
using
namespace
std;
class
Parent
{
private
:
int
x;
public
:
Parent(
int
n = 0) : x(n) {}
Parent(
const
Parent& copy) : x(copy.x) {}
int
getX() {
return
x; }
};
class
Child :
public
Parent
{
private
:
int
y;
public
:
Child(
int
n1 = 0,
int
n2 = 0) : Parent(n1), y(n2) {}
Child(
const
Child& copy) : y(copy.y) {}
int
getY() {
return
y; }
};
int
main(
void
)
{
Child c1(1);
Child c2(c1);
cout << c1.getX() <<
','
<< c1.getY() << endl;
cout << c2.getX() <<
','
<< c2.getY() << endl;
return
0;
}
1,0 0,0 |
부모 클래스의 멤버에 대해 정상적으로 복사 생성자가 호출되기 위해 자식 클래스의 복사 생성자에서 명시적으로 부모 클래스의 복사 생성자를 호출해주자.
1 |
Child( const Child& copy) : Parent(copy), y(copy.y) {} |
1,0 1,0 |
반응형