美文网首页
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++博客文章

    三大特性 封装、继承、多态 多态 C++ 虚函数表解析C++多态的实现原理 介绍了类的多态(虚函数和动态/迟绑定)...

  • 多态的C++实现

    多态的C++实现 1 多态的原理 什么是多态?多态是面向对象的特性之一,只用父类指针指向子类的对象。 1.1 多态...

  • C++ 多态的实现和原理

    多态的实现虚函数原理 一、在编译期间实现多态 多态是指在不同的条件下表现出不同的状态,C++中通过重载函数的方法可...

  • Swift5.1学习随笔之多态

    多态的实现原理: OC:Runtime C++:虚表(虚函数表) Swift:纯Swift没有Runtime,更加...

  • Cpp7 C++的多态实现 -- 虚表

    Cpp7 C++的多态实现 -- 虚表 多态的实现原理 总结:1. 当我们在类中定义虚函数时,就会产生虚表2. 多...

  • C++ - 多态实现原理

    多态的实现举例 看一下例子程序 输出结果:8,12比正常输出多出了4个字节。 多态实现原理 每一个有虚函数的类(或...

  • 聊聊Java的泛型及实现

    摘要: 和C++以模板来实现静多态不同,Java基于运行时支持选择了泛型,两者的实现原理大相庭径。C++可以支持基...

  • Java基础之面向对象

    1.多态,继承,封装 Java实现多态有哪些必要条件?具体怎么实现?多态的实现原理?多态的作用? 答:多态的优点 ...

  • 建议27:明晓类公共领域的方法都是虚方法

    众所周知,在C++,C# 等面向对象开发语言中,虚方法(函数)是实现“多态”的基础,其实现原理:运行系统将根据对象...

  • 2.0 多态的实现

    本小节知识点: 【掌握】如何实现多态 【了解】多态的原理 【掌握】多态的注意点 1.如何实现多态 Animal是父...

网友评论

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

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