C++虚函数行为

C++ virtual function behavior

我正在根据我的理解做一些练习。在编译下面的代码时,我得到 Derived::disp() 调用,它又调用非虚函数 "Print".

我的问题是即使 "Print" 不是虚拟的,为什么调用 Derived class "Print"version 而不是 Base print version。

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()

如果您在(虚拟或非虚拟)成员函数内调用非虚拟函数,则调用该 class 的成员函数。

如果您要在 main 中调用 pB->print(),它会调用 Base::Print。但就目前而言,pB->Disp() 调用 Derived::Disp() 调用 Derived::Print 的基础是它是从 Derived class.

内部调用的

在非静态成员函数的主体中,关键字 this 具有指向调用该函数的 class 类型对象的指针类型。

如果为派生 class 调用虚函数,则 this 具有此 class 的指针类型。

内部成员函数访问 class 成员在您的程序上下文中查找例如

( *this ).print();

其中 this 的类型为 Derived *.

因此调用了这个class的成员函数print