美文网首页
C++ - 多态实现原理

C++ - 多态实现原理

作者: Mitchell | 来源:发表于2016-01-27 11:56 被阅读1094次

    多态的实现举例

    • 看一下例子程序
    class Base{
        public:
          int i;
          virtual void Print(){out<<"Base:Print";}
    };
    class Derived:public Base{
          public:
          int n;
          virtual void Print(){out<<"Derived:Print"<<endl;}
    }
    int main(){
          Derived d;
          cout<<sieof(Base)<<","<<sizeof(Derived);
          return 0 ;
    }
    

    输出结果:8,12
    比正常输出多出了4个字节。


    多态实现原理

    • 每一个有虚函数的类(或有虚函数的类的派生类)都有一个虚函数表,该类的任何对象中都放着虚函数表的指针。虚函数表中列出了该类的虚函数地址。多出来的4歌字节就是用来放虚函数表的地址的。
      pBase.png
      pDerived.png

    多态的关键 -- 虚函数表

    • 多态的函数调用语句被编译成一系列根据基类指针所指向的(或基类引用所引用的)对象中存放的虚函数表的地址,在虚函数表中查找虚函数地址,并调用虚函数的指令。

    多态存在的问题

    • 会在编译期间造成额外的时间和空间上的开销
      • 空间,每一个有虚函数类的对象都会多4个字节存放虚函数表
      • 时间,对多态的函数执行的指令,会执行查虚函数表的一系列指令,导致有额外的时间上的开销。

    相关文章

      网友评论

          本文标题:C++ - 多态实现原理

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