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;
}
上面的代码打印在控制台上。现在,我理解了虚函数的概念,但我无法在这里应用它。在我的理解中,每当我们调用虚函数时,编译器都会修改调用"this->vptr->virtualfunc()"
,这就是最重要的派生类函数被调用的方式。但是在这种情况下,既然check()
不是虚函数,那么编译器如何确定它需要调用func()
派生的呢?