第 4 节 多态性2011.pptVIP

  • 1
  • 0
  • 约2.13万字
  • 约 88页
  • 2017-06-20 发布于湖北
  • 举报
一般继承(有虚函数重载)虚函数表 下面这个类的设计中,我们只重载了父类的一个函数:f()。那么,对于派生类的实例,其虚函数表是: 我们从表中可以看到下面几点, 1)重载的f()函数被放到了虚表中原来父类虚函数的位置。 2)没有被重载的函数依旧。 这样,我们就可以看到对于下面这样的程序, Base *b = new Derive(); b-f(); 由b所指的内存中的虚函数表的f()的位置已经被Derive::f()函数地址所取代,于是在实际调用发生时,是Derive::f()被调用了。这就实现了多态。 多重继承(无虚函数重载) 假设有下面这样一个类的继承关系。注意:子类并没有重载复类的函数。子类实例中的虚函数表: 我们可以看到: 1)每个父类都有自己的虚表。 2)子类的成员函数被放到了第一个父类的表中。(所谓的第一个父类是按照声明顺序来判断的) 这样做就是为了解决不同的父类类型的指针指向同一个子类实例,而能够调用到实际的函数。 多重继承(有虚函数重载) 下图中,我们重载了父类的f()函数。下面是对于子类实例中的虚函数表的图: 我们可以看见,三个父类虚函数表中的f()的位置被替换成了子类的函数指针。这样,我们就可以任一静态类型的父类来指向子类,并调用子类的f()了。如: Derive d; Base1 *b1 = d; Base2 *b2 = d; Base3 *b3 =

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档