C++ 来自普通函数的虚拟函数调用 类基 { 公众: void virtual func(){cout
编译器如何确定需要调用派生函数的func()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() {
以同样的方式-通过调用
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;
}