动态绑定只发生在C ++中的堆上的对象吗?

时间:2010-04-17 16:07:09

标签: c++

动态绑定会发生在堆栈上的对象吗?

例如

f()是Base和Derived中的虚函数

int main(){

  Derived d1;
  Based *b= new Derived();

  d1.f();
  b->f();
}

2 个答案:

答案 0 :(得分:6)

虚函数适用于堆和堆栈对象。请尝试以下方法:

#include <iostream>

class base
{
public:
    virtual void doit()
    {
        std::cout << "base::doit" << std::endl;
    }
};

class derived : public base
{
public:
    virtual void doit()
    {
        std::cout << "derived::doit" << std::endl;
    }
};

void invokevirtual(base &b)
{
    b.doit();
}

int main()
{
    derived d;
    invokevirtual(d);
}

答案 1 :(得分:0)

很抱歉这个简短的回答,但你似乎知道发生了什么,只需要一些确认,对吗?