我在理解上做了一些练习.在编译下面的代码我得到Derived :: disp()调用,然后调用非虚函数"打印".
我的问题是为什么调用派生类"打印"版本而不是基本打印版本甚至"打印"不是虚拟的.
class Base { public: void print(){ cout<<"Base::Print()\n"; } virtual void disp(){ cout<<"Base::Disp()\n"; } }; class Derived: public Base { public: void print(){ cout<<"Derived::Print()\n"; } void disp(){ cout<<"Derived::Disp()\n"; print(); } }; void main() { Base *pB = new Derived(); pB->disp(); }
输出:
Derived :: Disp()
Derived :: Print()
如果在(虚拟或非虚拟)成员函数内调用了非虚函数,则调用该类的成员函数.
如果你打电话给pB->print()
主,它会打电话Base::Print
.但就目前而言,pB->Disp()
调用的基础是从类内部Derived::Disp()
调用Derived::Print
它Derived
.