У меня есть два класса Base
и Derived
следующим образом:
class Base
{
public:
};
class Derived : public Base
{
public:
};
и основная функция:
int main()
{
Base* ptr = new Derived;
std::cout << typeid(*ptr).name() << endl;
delete ptr;
system("pause");
}
Выходные данные программы показывают class Base
там, где я ожидал увидеть class Derived
. Но когда я добавил виртуальный метод в класс Base
, теперь на выходе отображается class Derived
!
Зачем RTTI хотя бы один виртуальный метод?
typeid
? Я бы, наверное, сделал это как скрытый виртуальный метод. Но если в классе нет виртуальных методов (и, следовательно, vtable), это невозможно. Я думаю, что спецификация C++ была написана для этого. - person Mark Ransom   schedule 22.01.2015ptr
какBase*
. Что еще вы ожидаете? Это не похоже на Java, у которой есть проверка типов во время выполнения. C++ полностью статичен. - person texasbruce   schedule 22.01.2015Base
имеет хотя бы один виртуальный метод, и это было моей точкой зрения. - person Farhad Reza   schedule 22.01.2015