美文网首页
虚函数实现原理 多态实现原理

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

作者: Myth52125 | 来源:发表于2017-09-05 21:36 被阅读0次

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

    虚函数作用

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

    实现原理

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

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

    调用过程

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

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

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

    多态用处

    复用和提高维护性

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

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

    相关文章

      网友评论

          本文标题:虚函数实现原理 多态实现原理

          本文链接:https://www.haomeiwen.com/subject/ehppjxtx.html