zoukankan      html  css  js  c++  java
  • 深入探索c++对象模型()

    (一) 加上封装后的布局成本

      c++在布局 在存取时间上主要的额外负担是有virtual 引起,包括: 虚函数  虚子类

    虚函数表是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。


    一般继承(有虚函数覆盖)

    1)虚函数按照其声明顺序放于表中。

    2)父类的虚函数在子类的虚函数前面。【父.f】【父.g】【子.f1】【子.g1】

    一般继承(有虚函数覆盖)

    1)覆盖的f()函数被放到了虚表中原来父类虚函数的位置。

    2)没有被覆盖的函数依旧。【子.h】【父.g】【子.f1】【子.g1】

    多重继承(无虚函数覆盖)

    1)  每个父类都有自己的虚表。

    2)  子类的成员函数被放到了第一个父类的表中。(所谓的第一个父类是按照声明顺序来判断的)

    【父0.f】【父0.g】【子.f1】【子.g1】【父1.f2】【父1.g2】【父2.f3】【父2.g3】

    多重继承(有虚函数覆盖)

    【子.f】【父0.g】【子.f1】【子.g1】【子.f】【父1.f2】【父1.g2】【子.f】【父2.f3】【父2.g3】

    (二) C++对象模型

         非static数据对象配置与class object 内,静态数据对象,静态函数对象,非静态函数存在与class object之外(基本对象模型)

      对包含虚函数的class,生成virtual table,class object 中保存 指向virtual table 的指针 vbtr;vbtr的设定和重置都由构造函数,析构函数,和拷贝函数完成,并保存type_info (用以支持RTTI)(表格驱动模型)

      虚拟继承继承 bases class 不管在继承串链中派生多少次,永远只会有一个实体,例如  

      class istream:virtual public class ios{...};

      class ostream:virtual public class ios{...};

          class iostream:public class istream,public class  ostream{};

      

  • 相关阅读:
    使用Swagger为ASP.NET Core WebApi生成API文档
    TypeScript入门笔记(五)
    TypeScript入门笔记(四)
    TypeScript入门笔记(三)
    .net core WebAPI+EF 动态接收前台json,并动态修改数据库
    记走出自动化部署的第一步
    工厂模式
    使用bootstrap fileinput多文件拖拽上传的记录
    判断登录跳回原地址方法
    使用Microsoft Teams 搭建远程视频
  • 原文地址:https://www.cnblogs.com/WillingCPP/p/2989754.html
Copyright © 2011-2022 走看看