虚函数

作者: 一叶之界 | 来源:发表于2017-03-17 22:57 被阅读0次

    1. 虚函数的声明

    定义:每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针。
    在类中,用virtual声明的成员函数。

    // 案例:
    class B
    {
    private: 
      int a;
    public:
      vortual void max();  //虚函数的声明
    }
    

    2. 虚函数的功能

    虚函数主要实现C++的多态和成员函数的重写。

    3. 虚函数的实现机制

    说到虚函数是怎么实现的,我们首先会想到虚函数表(vtable)和虚函数指针。
    虚函数的处理:编译器在编译,发现类中有成员函数为虚函数,则会建立一个虚函数表;且该虚函数表为同一个类的共享内存。
    虚函数表的结构:它是一个函数指针表,每一个表项都指向一个函数。任何一个包含至少一个虚函数的类都会有这样一张表。vtable只包含虚函数的指针,没有函数体。实现上是一个函数指针的数组。虚函数表既有继承性又有多态性。每个派生类的vtable继承了它各个基类的vtable,如果基类vtable中包含某一项,则其派生类的vtable中也将包含同样的一项,但是两项的值可能不同(即指向不同的函数)。如果派生类覆盖(override)了该项对应的虚函数,则派生类vtable的该项指向覆盖后的虚函数,没有覆盖的话,则沿用基类的值。

    注意:虚函数表是在编译器编译的时候创建的。

    相关文章

      网友评论

          本文标题:虚函数

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