【发布时间】:2017-12-12 13:33:08
【问题描述】:
在以下代码中,如何从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?)
【问题讨论】:
-
您的代码(如您所见)没有调用
f函数,因此声明的输出与代码不匹配。 -
已编辑。谢谢。
标签: c++ inheritance virtual