Указатели, указывающие в унаследованных классах

55
7

Предположим, у нас есть символ BaseClass и три подкласса Good, Bad, Zombie. Также предположим, что у нас есть два указателя

Character* ptr1,ptr2;

этот пункт в классе Хороший, Плохой или Зомби. Я хочу создать часть кода следующим образом:

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

и так далее. Как я могу написать такое выражение? Мне трудно понять виртуальные функции, полиморфизм и наследование, но не стесняйтесь объяснять их.

Заранее спасибо.

спросил(а) 2016-05-07T22:20:00+03:00 4 года, 2 месяца назад
1
Решение
101

Вы можете использовать dynamic_cast следующим образом:


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

ответил(а) 2016-05-07T22:26:00+03:00 4 года, 2 месяца назад
66

Вы можете объявить виртуальный публичный метод в символе, который возвращает класс перечисления, представляющий тип символа, например

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)) {...}

ответил(а) 2016-05-08T00:31:00+03:00 4 года, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема