![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
Tony |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: ![]() ![]() ![]() |
Доброго всем времени суток.
Имеется такой код: class CBase т.е. есть некий базовый абстрактный класс, у которого много наследников. Далее происходит вот что: CBase *pBase = new CDerv1; Вопрос : очевидно, например с помощью typeid мы можем узнать тип объекта, на который на самом деле указывает pBase. Существует ли простой способ автоматически преобразовать pBase из типа CBase* в тип того объекта, на который он на самом деле указывает (в данном случае в CDerv1*)? |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Почему не написать полиморфную функцию:
void f(CBase *p) ? Зачем ты уходишь от механизма виртуальных функций, и хочешь делать это же вручную? Можно, кстати, Цитата if ( typeid(*pBase).name() == "CDerv1" ) F( (CDerv1*)pBase ); if(dynamic_cast<CDerv1*>(pBase)) f(dynamic_cast<CDerv1*>(pBase));, но хрен редьки не слаще... Хм... Ан нет, слаще. Под GCC твой вариант не работает (там строка в другом формате возвращается), а мой - работает. Или вот этот: if ( typeid(*pBase) == typeid(CDerv1)) f( (CDerv1*)pBase );, тоже работает. Но основной вопрос был озвучен выше, почему не виртуальные функции? |
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 14:51 |