본문 바로가기
Programming/C/C++

C++ 상속시 생성자, 소멸자의 호출

by bbolmin 2013. 3. 9.

 

 

- 상속에서 기초 클래스의 생성자와 유도 클래스의 생성자가 모두 호출된다.

- 소멸자 역시 기초 클래스, 유도 클래스 둘다 호출된다.

 

 

#include <iostream>
using namespace std;

class Parent
{
private:
 int test1;
public:
 Parent() : test1(1)
 {
  cout << "부모 생성" << endl;
 }
 ~Parent()
 {
  cout << "부모 소멸" << endl;
 }
};

class Child : public Parent
{
private:
 int test2;
public:
 Child():test2(1)
 {
  cout << "자식 생성 " << endl;
 }
 ~Child()
 {
  cout << "자식 소멸 " <<endl;
 }

};

int main()
{
 Child *myobj = new Child;
 
 delete myobj;
 return 0;
}

 

 

실행 결과

 

 

부모 생성
자식 생성
자식 소멸
부모 소멸
계속하려면 아무 키나 누르십시오 . . .

 

[*] 위의 예제는 void 생성자가 호출되었지만 멤버변수를 초기화할 때는  멤버 이니셜라이져를 사용한다.

위에서 실행 결과를 보면 생성자의 호출순서와 소멸자의 호출순서가 반대인데 아래처럼 생성된 객체가 스택에 저장되기 때문이다.

 

#include <iostream>
using namespace std;

class Child
{
private:
 int test;
public:
 Child(int a):test(a) { cout << "자식 생성 ["<<test<<"]" << endl; }
 ~Child() { cout << "자식 소멸 [" <<test<<"]" <<endl;  }
};

 

int main()
{
 Child myobj1(1);
 Child myobj2(2);
 Child myobj3(3);

 return 0;
}

 

 

실행 결과

 

자식 생성 [1]
자식 생성 [2]
자식 생성 [3]
자식 소멸 [3]
자식 소멸 [2]
자식 소멸 [1]
계속하려면 아무 키나 누르십시오 . . .

 

 

 

 

 

 

'Programming > C/C++' 카테고리의 다른 글

C++ 상속시의 접근제어 지시자  (0) 2013.03.09
복사 생성자  (0) 2013.02.27
C++ 기초 [3]  (0) 2013.02.27
C++ 기초 [2]  (0) 2013.02.26
C++ 기초 [1]  (0) 2013.02.26