第4章多态性20112hx2.pptVIP

  • 1
  • 0
  • 约2.16万字
  • 约 93页
  • 2017-05-25 发布于广东
  • 举报
第4章多态性20112hx2

一个类存在虚函数,那么编译器就会为这个类生成一个V-Table虚表,在虚表里存放的是这个类所有虚函数的地址。 当生成类对象的时候,编译器会自动的将类对象的前四个字节设置为虚表的地址,而这四个字节就可以看作是一个指向虚表的指针。 虚表里依次存放的是虚函数的地址,每个虚函数的地址占4个字节。 1)虚函数按照其声明顺序放于表中。 2)父类的虚函数在子类的虚函数前面。 假设我们有这样的一个类: class Base { public: virtual void f() { cout Base::f endl; } virtual void g() { cout Base::g endl; } virtual void h() { cout Base::h endl; } }; 按照上面的说法,我们可以通过Base的实例Base b;来得到虚函数表。 我们在虚函数表的最后多加了一个结点,这是虚函数表的结束结点。 一般继承(无虚函数重载)虚函数表 下面继承关系中,子类没有重载任何父类的函数。那么,在派生类的实例d中,其虚函数表如下所示: 我们可以看到下面几点: 1)虚函数按照其声明顺序放于表中。 2)父类的虚函数在子类的虚函数前面。 一般继承(有虚函数重载)虚函数表 下面这个类的设计中,我们只重载了父类的一个函数:f()。那么,对于派生类的实例d,其虚函数表是: 我们从表

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档