基本上我想知道的是,如果给出指向派生类型的指针,为什么typeid不返回派生类型的typeinfo。
示例:
如果有:
class Base {
public:
virtual void foo() {
std::cout << "This is base speaking" << std::endl;
}
};
class Derived : public Base {
public:
void foo() override {
std::cout << "This is derived speaking" << std::endl;
}
};
以下内容:
Derived obj;
Base& ref = obj;
Base* ptr = &obj;
std::cout << typeid(obj).name() << std::endl;
std::cout << typeid(ref).name() << std::endl;
std::cout << typeid(ptr).name() << std::endl;
会导致:
7Derived
7Derived
P4Base
虽然这个:
obj.foo();
ref.foo();
ptr->foo();
会导致:
This is derived speaking
This is derived speaking
This is derived speaking
我的猜测是Base *本身就是一个类型,即指向Base的指针,它不是多态的,因此是静态确定的。调用 foo 导致派生版本的原因是因为解除引用( - &gt;)。即使我是对的,我仍然觉得它有点令人困惑,因为 ptr 指向的对象实际上是派生。