【问题标题】:Virtual function call from a normal function从普通函数调用虚函数
【发布时间】:2012-04-15 11:06:58
【问题描述】:
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-&gt;vptr-&gt;virtualfunc()" 的调用,这就是最重要的派生类函数被调用的方式。但是在这种情况下,既然check()不是虚函数,那么编译器如何判断需要调用派生的func()呢?

【问题讨论】:

    标签: c++ polymorphism virtual


    【解决方案1】:

    编译器如何确定需要调用derived的func()?

    以同样的方式 - 通过调用 this-&gt;vptr-&gt;virtualfunc()。回想一下this 即使在基类内部也属于派生类,因为每个派生类也是一个基类,所以访问虚函数的方法相同也为它。

    【讨论】:

      【解决方案2】:

      完全按照您所说的方式,通过在类成员中使用vptr。它知道函数是virtual,因此它知道它必须通过虚函数表来调用它。

      【讨论】:

        猜你喜欢
        • 2012-06-02
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-28
        • 2010-10-05
        • 1970-01-01
        相关资源
        最近更新 更多