2011-08-16 5 views
5

여기 http://www.parashift.com/c++-faq-lite/multiple-inheritance.html 섹션 [25.14]을상속 hierachy : 생성자 및 소멸자 실행 순서

실행될 최초 생성자 어디 계층에 가상베이스 클래스이다 말한다.

나는 다음과 같은 프로그램을 사용하여 확인하려고 :

  A (pure virtual) 
      | 
      B 
      | 
      C 
(virtual)/ \ (virtual) 
     E  D 
     \ /
      F 
      | 
      G (pure virtual) 
      | 
      H 

각 클래스는 c'tor 및 가상 디부 토르있다. 출력은 다음과 같습니다.

A 
B 
C 
E 
D 
F 
G 
H 
~H 
~G 
~F 
~D 
~E 
~C 
~B 
~A 
Press any key to continue . . . 

하지만 가상 기본 클래스 생성자가 먼저 실행되어야합니다.

내가 무엇을 undestand 잘못 했습니까?

EDIT : 내 이해에 따라이 동작은 기본 클래스가 가상 클래스인지 여부와 관련이 없습니다. 그러나 견적은 가상 기본 클래스에 주장한다. 내가 분명하거나 뭔가 비린내가있어?

감사합니다.

+0

보다 정확한 답변을 위해 사용했던 코드를 제공해주십시오. – amit

+0

@amit, 코드는 필요 없습니다. 이 동작은 예상대로입니다 ... – eran

답변

3

상속받은 클래스가 먼저 생성되지 않으면 가상 기본 클래스를 구성 할 수 없습니다. 따라서 가상의 기본 클래스가 종속되어 있기 때문에 비 가상 기본 클래스가 생성됩니다. AB까지는 C을 생성 할 수 없습니다. 따라서, 및 B은 실질적으로 C이 상속 되더라도, C 전에 실제로 구성됩니다.

+1

그건 어떤 scenerio에있어. 이 문구가 '계층 구조의 어느 곳에서나'추가 된 이유는 무엇입니까? – Azodious

+1

@Azodious, C++ FAQ는 환상적입니다. 그러나이 경우에는 설명이 부족하여 실제로 오해의 소지가있는 것 같습니다. 가상 기본 클래스는 어디에서나 처음으로 구성되지만, 모든 시나리오에서와 같이 기본 클래스를 구성해야합니다. 클래스가 초기화되는베이스에 의존 할 수 있어야하므로 다른 방법으로는 작동하지 않습니다. – eran

+0

Ok ... 그것을 지 웁니다. 감사. – Azodious