본문 바로가기

C++

[C++] 생성자 상속

생성자를 다중정의 할 수 있다. 상속관계에서 파생 클래스객체를 생성하면 부모 클래스의 생성자도 호출 되는데 부모 클래스에 생성자를 다중 정의하면 어떤 생성자가 호출될까?

 

#include <iostream>
using namespace std;

//부모 클래스
class PClass
{
public:
	PClass() { cout << "PClass()" << endl; }
	PClass(int iparam) { cout << "PClass(int)" << endl; }
	PClass(double dparam) { cout << "PClass(double)" << endl; }

private:
	int num = 0;
};

//파생 클래스
class CClass : public PClass
{
public:
	CClass() { cout << "CClass()" << endl; }

	//부모 클래스 생성자 중 명시x
	CClass(int iparam)
	{
		cout << "CClass(int)" << endl;
	}

	//double형 dparam을 명시
	CClass(double dparam) : PClass(dparam)
	{
		cout << "CClass(double)" << endl;
	}
};

int main()
{
	PClass a;
	cout << endl;

	CClass b(10);
	cout << endl;

	CClass c(1.1);

	return 0;
}

 

결과값:

PClass()

PClass()
CClass(int)

PClass(double)
CClass(double)

 

명시한 경우 해당 생성자가 호출되었고 명시하지 않을 경우 매개변수에 따라 호출되었다.

 

CClass(double dparam) : PClass(dparam)

 

명시한 경우 : PClass(dparam)의 dparam은 부모 클래스의  PClass(double dparam)이 아니라 바로 옆에있는 CClass(double dparam)의 dparam을 의미한다. 따라서 dparam이 double형이니까 부모 클래스의 PClass(double dparam) 생성자가 호출되었다.