2016-05-07 3 views
0

BaseClass Characterと3つのSubClasses Good、Bad、Zombieがあるとします。 はまた、我々は、良い悪いか、ゾンビクラスで指す2つのポインタ継承しているクラスを指すポインタ

Character* ptr1,ptr2;

を持っていると仮定します。上

if ((ptr1 "shows" Good)&&(ptr2 "shows" Bad)) {...} else if ((ptr1 "shows" Good)&&(ptr2 "shows" Zombie)) {...} else if ...

ので:私はこのようなコードの一部を作成したいです。そのような声明を書くにはどうすればいいですか?私は、仮想関数、多形性、継承を理解するのに苦労しますが、それらについても説明することは自由です。

ありがとうございます。あなたは次のようにdynamic_castを使用することができ

+2

'dynamic_cast'を使って、' ptr# 'がいずれかの派生クラスに変換可能かどうかを調べることができます。 – 101010

+2

( 'ptr2'はポインタとして宣言されていません) – LogicStuff

答えて

0

:例えば、

if (dynamic_cast<Good*>(ptr1) && dynamic_cast<Bad*>(ptr2)) { 
    ... 
} else if (dynamic_cast<Good*>(ptr1) && dynamic_cast<Zombie*>(ptr2)) { 
    ... 
} else if ... 
+0

dynamic_castはstd :: bad_castもスローします – user31264

2

あなたは、文字の種類を表す列挙型クラスを返す文字に仮想パブリックメソッドを宣言することができ

virtual CharacterType GetCharacterType(); 
.... 
if((ptr1->GetCharacterType() == CharacterType::Good) && ptr2->GetCharacterType() == CharacterType::Bad)) {...} 

か文字の種類を確認する仮想メソッド。

virtual bool Is(CharacterType characterType); 
.... 
if((ptr1->Is(CharacterType::Good) && ptr2->Is(CharacterType::Bad)) {...} 
関連する問題