调用派生的基类函数

jkb*_*z64 7 c++ c++11

有没有办法从虚函数调用基类方法作为派生类,而不是基类?示例代码:

class A
{
public:
    virtual void a() = 0;
    void print() { std::cerr << typeid(decltype(*this)).name(); };
};

class B : public A
{
public:
    virtual void a() { print(); }
};

int main() 
{
    B b;
    b.a(); //prints 1A, I want it to print 1B, is it even possible?
}
Run Code Online (Sandbox Code Playgroud)

Bar*_*rry 14

只需删除decltype:

void print() { std::cerr << typeid(*this).name(); };
Run Code Online (Sandbox Code Playgroud)

this总是指向一个类的实例,其成员函数的this内部A始终是一个A*.所以typeid(decltype(*this))总是给你A.

另一方面,typeid(*this)将查找运行时类型信息,这将确定this实际上是B(因为A是多态类型).