问题描述
我了解到,当未启用RTTI或相关类不是虚拟类时,我可以预期得到的行为,但是在这种情况下,我不明白为什么我没有得到正确的类型。 typeid()应该在运行时确定某种类型,例如,通过取消指向它的指针,它应该在此处返回正确的“ BorderedWindow”,不是吗?
#include <iostream>
#include <string>
class Window
{public:
Window()
{
std::cout << getClasstype() << '\n'; // PRINTS "Window"
}
std::string getClasstype()
{
return typeid(*this).name();
}
virtual ~Window() {}
};
class BorderedWindow : public Window
{public:
BorderedWindow() : Window()
{
std::cout << getClasstype() << '\n'; // PRINTS "BorderedWindow"
}
};
int main()
{
BorderedWindow* b = new BorderedWindow;
}
我知道,当从Window的构造函数调用getClasstype()时,它将传递指向Window的指针,但是typeid()应该确定其类型为BorderedWindow,不是吗?因为它是在运行时检查虚拟表信息完成的。从本质上讲,我希望每当将指向类对象的指针传递给typeid()时,就可以准确地找出类型。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)