typeid返回错误的类型

问题描述

我了解到,当未启用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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...