在 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
?)
使用pBase->Base::g();
强制调用Base
中的g
。
是的,Derived::f
是 virtual
。我个人认为重新强调 virtual
的品味很差。从 C++11 开始,您可以在重写的函数上使用 override
说明符,然后如果 virtual
从基 class.
[ 中删除,编译器会发出诊断信息=25=]
在下面的代码中,如何从 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
?)
使用
pBase->Base::g();
强制调用Base
中的g
。是的,
[ 中删除,编译器会发出诊断信息=25=]Derived::f
是virtual
。我个人认为重新强调virtual
的品味很差。从 C++11 开始,您可以在重写的函数上使用override
说明符,然后如果virtual
从基 class.