생성자를 다중정의 할 수 있다. 상속관계에서 파생 클래스객체를 생성하면 부모 클래스의 생성자도 호출 되는데 부모 클래스에서 생성자를 다중 정의하면 어떤 생성자가 호출될까?
#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) 생성자가 호출되었다.
'C++' 카테고리의 다른 글
[C++] 가상 함수(Virtual function)와 소멸자 가상화 (0) | 2019.12.27 |
---|---|
[C++] 메소드 오버라이드(Override) (0) | 2019.12.26 |
[C++] 접근 제어 지시자(public, protected, private) (0) | 2019.12.25 |
[C++] 상속(Inheritance) (0) | 2019.12.25 |
[C++] operator 배열 연산자와 단항 증감 연산자 (0) | 2019.12.24 |