C++虚函数行为

Raj*_*Raj 1 c++ virtual-functions

我在理解上做了一些练习.在编译下面的代码我得到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();
}
Run Code Online (Sandbox Code Playgroud)

输出:
Derived :: Disp()
Derived :: Print()

Mat*_*son 5

如果在(虚拟或非虚拟)成员函数内调用了非虚函数,则调用该类的成员函数.

如果你打电话给pB->print()主,它会打电话Base::Print.但就目前而言,pB->Disp()调用的基础是从类内部Derived::Disp()调用Derived::PrintDerived.