调用派生的基类函数

时间:2016-09-23 13:21:47

标签: 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?
}

1 个答案:

答案 0 :(得分:14)

只需删除decltype

即可
void print() { std::cerr << typeid(*this).name(); };

this始终指向其成员函数所在的类的实例。this内的A始终为A*。因此typeid(decltype(*this))始终会为您提供A

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