从正常函数调用虚函数

时间:2012-04-15 11:06:58

标签: c++ polymorphism virtual

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

2 个答案:

答案 0 :(得分:7)

  

编译器如何确定它需要调用派生的?(/ p>)的func()

以相同的方式 - 通过调用this->vptr->virtualfunc()。回想一下,即使在基类内,this也属于派生的类,因为每个派生类也是基类,所以访问虚拟的方式相同功能也适用于它。

答案 1 :(得分:2)

正如你所说的那样,通过使用类成员中的vptr。它知道函数是virtual,因此它知道它必须通过虚函数表调用它。