虚函数实现原理 多态实现原理

这两个问题是同一个。
多态的实现就是虚函数的实现原理。虚函数的实现就是为了多态。

虚函数作用

允许在派生类中重新定义与基类同名函数,并且可以通过基类指针或引用来访问基类或派生类同名函数

实现原理

每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表(多继承有多个。同时第一个为主基类),其中存放着该类所有的虚函数对应的函数指针。
有虚函数的类内部有一个称为“虚表”的指针,指向该表。

如果类没有重写虚函数,那么直接拷贝继承来的虚函数到虚函数表中。
如果类重写了虚函数,需要在虚函数表中覆盖对应的虚函数。
同名虚函数在虚函数表中的偏移量相同。(如果类是个多继承,且都有虚函数,那么他就有多个虚函数表指针,为了使偏移量相等。)

调用过程

在编译器,无法获得具体的类型是什么。但是能够获得其调用函数的虚函数表,和在表中的偏移量。
在运行时,能够获得具体的类型,获得其虚函数表指针,然后指针加上偏移量,就能够获得对应的函数。

多继承中,基类指针指向的是派生类中自己继承过去的部分。

虚函数的效率低其原因就是,在调用虚函数之前,还调用了获得虚函数地址的代码。

多态用处

复用和提高维护性

  1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。//继承
  2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。 //多态的真正作用

http://www.cnblogs.com/malecrab/p/5572730.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一个博客,这个博客记录了他读这本书的笔记,总结得不错。《深度探索C++对象模型》笔记汇总 1. C++对象模型与内...
    Mr希灵阅读 11,035评论 0 13
  • 1. 结构体和共同体的区别。 定义: 结构体struct:把不同类型的数据组合成一个整体,自定义类型。共同体uni...
    breakfy阅读 6,530评论 0 22
  • 1. C++基础知识点 1.1 有符号类型和无符号类型 当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值...
    Mr希灵阅读 18,107评论 3 82
  • 什么是继承?什么是多重继承?多重继承存在变量和函数名冲突怎么办?子类对象和父类对象的内存模型是什么样的?虚继承如何...
    金戈大王阅读 7,468评论 3 12
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,160评论 1 51

友情链接更多精彩内容