c – 调用派生的基类函数

前端之家收集整理的这篇文章主要介绍了c – 调用派生的基类函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法从虚函数调用基类方法作为派生类,而不是作为基类?
示例代码
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?
}

解决方法

只需删除decltype:
void print() { std::cerr << typeid(*this).name(); };

这总是指向其成员函数所在的类的实例.这里面的A总是A *.所以typeid(decltype(* this))总能给你A.

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

猜你在找的C&C++相关文章