C++ 来自普通函数的虚拟函数调用 类基 { 公众: void virtual func(){cout

C++ 来自普通函数的虚拟函数调用 类基 { 公众: void virtual func(){cout,c++,polymorphism,virtual,C++,Polymorphism,Virtual,编译器如何确定需要调用派生函数的func() 以同样的方式-通过调用this->vptr->virtualfunc()调用。回想一下,这个甚至在基类内部也属于派生类,因为每个派生类也是基类,所以访问虚拟函数的方法也适用于它。正是您所说的方法,在类成员中使用vptr。它知道函数是虚拟的因此,它知道它必须通过虚拟函数表调用它 class base { public: void virtual func(){cout<<"base";} void check() {

编译器如何确定需要调用派生函数的func()


以同样的方式-通过调用
this->vptr->virtualfunc()调用
。回想一下,
这个
甚至在基类内部也属于派生类,因为每个派生类也是基类,所以访问虚拟函数的方法也适用于它。

正是您所说的方法,在类成员中使用
vptr
。它知道函数是
虚拟的因此,它知道它必须通过虚拟函数表调用它

class base
{
public:
    void virtual func(){cout<<"base";}
    void check()
    {
        func();
    }
};
class derived: public base
{
public:
    void func(){cout<<"dervied";}
};
int main()
{
    base *obj = new derived();
    obj->check();
    return 0;
}