2017-10-17 2 views
0

난 다음 상속 구조 타입 송풍기 가지고반복 상속 static_cast

     Holder 
    /     |   \ 
    |     |   | 
Holder_A_1   Holder_B_1 Holder_C_1 
    |     |   ... 
Holder_A_2   Holder_B_2 
    ...     ... 
    |     | 
Holder_A_base  Holder_B_base Holder_C_base 
    |     |   ... 
Holder_A_base_2 Holder_B_base_2 
    ...     ... 
    |     |    | 
Anchor    Anchor  Anchor 

. (앵커 기본 클래스는 목적에 반복)

오브젝트 구축시를 I는 홀더 객체를 생성 및 저장 및 삭제를 위해 Anchor *로 전송하십시오. 캐스트는 동음에 대한 Holder_A_base*을 통해 이루어집니다 : static_cast<Holder_A_base*>(static_cast<Anchor*>(this))

내 질문은 : Holder_B_base*에 나는 사실을 알고있는 경우가 Anchor*에서 static_cast 법적이다 (위에서 설명한대로 구성) 이들 모두에서 파생를 삭제됩니다 Holder 객체 유형?

답변

1

static_cast에서 Holder_A_base_2 *까지 Holder_B_base * 사이의 값을 사용하면 쉽게 이해할 수 있습니다. 아닙니다. 컴파일되지 않습니다.

Anchor *에서 Holder_B_base *까지의 캐스팅은 Anchor 개체가 Holder_B_base의 일부인 경우를 제외하고는 컴파일되지 않지만 정의되지 않은 동작입니다.

Anchor *에서 포함되지 않은 클래스로 캐스트해야하는 경우 dynamic_cast을 사용할 수 있습니다. 이것은 크로스 캐스트를 허용합니다.