자식 클래스의 인스턴스를 생성할 땐, 부모 클래스의 생성자가 먼저 호출된 뒤 자식 클래스의 생성자가 호출된다.
자식 클래스는 부모 클래스를 상속받으면서 자식 클래스에서 정의하지않은 멤버들을 갖게된다. 그 멤버들은 부모 클래스의 생성자를 통해 정의되므로 자식 클래스의 생성자보다 부모 클래스의 생성자가 먼저 호출되어야한다.
반대로 소멸자의 경우에는 자식 클래스의 소멸자가 먼저 호출되어 자원을 정리한 후, 부모 클래스의 소멸자를 호출하여 자원을 정리한다.
부모 클래스 생성자와 소멸자에 대한 access까지 상속되지는 않지만 자식 클래스의 생성자와 소멸자에서 자동으로 호출된다.
class Mother {
public:
Mother ()
{ cout << "Mother: no parameters\n"; }
Mother (int a)
{ cout << "Mother: int parameter\n"; }
};
class Daughter : public Mother {
public:
Daughter (int a)
{ cout << "Daughter: int parameter\n\n"; }
};
int main()
{
Daugther a(1);
return (0);
}
👇 output
Mother: no parameters
Daughter: int parameter
위 코드처럼 자식 클래스 생성자에서 부모 클래스의 생성자를 호출하지않으면 자동으로 부모 클래스의 기본 생성자가 호출된다.
class Mother {
public:
Mother ()
{ cout << "Mother: no parameters\n"; }
Mother (int a)
{ cout << "Mother: int parameter\n"; }
};
class Daughter : public Mother {
public:
Daughter (int a)
{ cout << "Daughter: int parameter\n\n"; }
};
class Son : public Mother {
public:
Son (int a) : Mother (a)
{ cout << "Son: int parameter\n\n"; }
};
int main () {
Daughter kelly(0);
Son bud(0);
return 0;
}
👇 output
Mother: no parameters
Daughter: int parameter
Mother: int parameter
Son: int parameter
부모 클래스의 특정 생성자를 호출하고 싶은 경우 Son의 생성자 처럼 초기화 리스트에 작성하면된다.