> For the complete documentation index, see [llms.txt](https://ezcode.gitbook.io/bnb-cpp/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ezcode.gitbook.io/bnb-cpp/inheritance/derived-constructor.md).

# 파생클래스의 생성자 및 소멸자

### 파생 클래스의 생성자 <a href="#ec-83-9d-ec-84-b1-ec-9e-90" id="ec-83-9d-ec-84-b1-ec-9e-90"></a>

이전 예제에서도 보았듯이 파생 클래스의 생성자함수 초기화 리스트에서 기초 클래스의 생성자를 호출한다.

파생 클래스에서 명시적으로 기초 클래스의 생성자 함수를 호출하지 않더라도 암묵적으로 기초클래스의 생성자 함수가 호출된다.

### 파생 클래스의 소멸자 <a href="#ec-86-8c-eb-a9-b8-ec-9e-90" id="ec-86-8c-eb-a9-b8-ec-9e-90"></a>

소멸자도 생성자와 마찬가지로 파생클래스의 객체가 소멸될때 기초클래스의 소멸자가 호출된다.

다음 예제에서 생성자와 소멸자의 호출을 살펴보자

```
#include <iostream>
using namespace std;

class Base {
  int baseNum;
public :
  Base() 
    :baseNum(20) 
  {
    cout << "Base() 생성자 호출 : " << baseNum << endl;
  }

  Base(int num) 
    : baseNum(num) 
  {
    cout << "Base(int num) 생성자 호출 : " << baseNum << endl;
  }

  ~Base() {
    cout << "~Base() 소멸자 호출 : " << baseNum << endl;
  }
};

class Derived : public Base
{
  int derivedNum;
public :
  Derived() 
    : derivedNum(50) 
  {
    cout << "Derived() 생성자 호출 : " << derivedNum << endl;
  }

  Derived(int num) 
    : Base(num), derivedNum(num) 
  {
    cout << "Derived(int num) 생성자 호출 : " << derivedNum << endl;
  }

  ~Derived() {
    cout << "~Derived() 소멸자 호출 : " << derivedNum << endl;
  }
};

int main() {
  cout << "case 1 ........." << endl;
  Derived obj1;

  cout << endl;
  cout << "case 2 ........." << endl;
  Derived obj(15);

  cout << endl;
  cout << "프로그램 종료............" << endl;
  return 0;
}
```

28행 \~ 32행의 어떠한 인자도 받지 않는 생성자 호출시 암묵적으로 기초 클래스의 생성자가 호출되는 것을 알 수 있다.

먼저 기초클래스가 먼저 생성되고 파생 클래스가 생성되며, Stack 구조처럼 파생클래스가 먼저 소멸되고 기초 클래스가 소멸된다.
