2016-05-07 3 views
0

Angenommen, wir haben einen BaseClass-Charakter und drei SubClasses: Gut, Böse, Zombie. Auch gehen wir davon aus zwei ZeigerZeiger, die in vererbte Klassen zeigen

Character* ptr1,ptr2;

haben, die gut in der Klasse zeigen, Bad oder Zombie. Ich möchte ein Teil von Code wie folgt erstellen:

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

und so weiter. Wie kann ich eine solche Aussage schreiben? Es fällt mir schwer, virtuelle Funktionen, Polymorphie und Vererbung zu verstehen, aber ich kann mich auch darauf verständigen.

Vielen Dank im Voraus.

+2

Sie könnten 'dynamic_cast' verwenden, um zu überprüfen, ob' ptr # 'in eine der abgeleiteten Klassen konvertiert werden kann. – 101010

+2

('ptr2' ist nicht als Zeiger deklariert) – LogicStuff

Antwort

0

Sie dynamic_cast auf folgende Weise verwenden:

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

dynamic_cast wirft auch std :: bad_cast – user31264

2

Sie könnten eine virtuelle öffentliche Methode in Zeichen deklarieren, die eine ENUM-Klasse, die die Art von Charakter gibt, zum Beispiel

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

oder eine virtuelle Methode, die den Typ des Zeichens bestätigt.

virtual bool Is(CharacterType characterType); 
.... 
if((ptr1->Is(CharacterType::Good) && ptr2->Is(CharacterType::Bad)) {...}