在 C++ 中访问重写的父虚方法

Access overriden parent virtual method in C++

在下面的代码中,如何从 pBase 访问 Base::g()? (仍然让“pBase->g();”像下面那样工作)

#include <iostream>
using namespace std;

class Base
{
    public:
    virtual void f(){ cout << "Base::f()" << endl; }
    virtual void g(){ cout << "Base::g()" << endl; }
    void h(){ cout << "Base::h()" << endl; }
};

class Derived : public Base
{
    public:
    void f(){ cout << "Derived::f()" << endl; }
    virtual void g(){ cout << "Derived::g()" << endl; }
    void h(){ cout << "Derived::h()" << endl; }
};

int main()
{
    Base *pBase = new Derived;
    pBase->f();
    pBase->g();
    pBase->h();

    Derived *pDerived = new Derived;
    pDerived->f();
    pDerived->g();
    pDerived->h(); 
    return 0;
}

输出为:

Derived::f()
Derived::g()
Base::h()
Derived::f()
Derived::g()
Derived::h()

还有,Derived::f()Derived::g()是不是一模一样? (即自动定义为virtual?)

  1. 使用pBase->Base::g();强制调用Base中的g

  2. 是的,Derived::fvirtual。我个人认为重新强调 virtual 的品味很差。从 C++11 开始,您可以在重写的函数上使用 override 说明符,然后如果 virtual 从基 class.

    [ 中删除,编译器会发出诊断信息=25=]