美文网首页
第一章 关于对象

第一章 关于对象

作者: IAQ | 来源:发表于2017-04-28 22:52 被阅读0次

简单对象模型(A Simple Object Model)


一个objects是一系列的slots。
members本身不放在object中,只有指向member的指针放在object中。
​ 避免members有不同类型,因而需要不同的存储空间所招致的问题
Object中的members是以slot的索引值来寻址。



用于C++指向成员的指针概念之中

表格驱动对象模型(A Table-driven Object Model)


屏幕快照 2017-04-28 下午8.09.27.png

用于virtual functions的一个有效方案

C++对象模型(The C++ Object Model)


Class object内: nonstatic data members
Class object外: static data members、static and nonstatic function members
Virtual functions:

  • vtbl 存放每一个class生成的指向vf的指针
  • 每一个class object 被添加一个指向vtbl的指针(vptr),设定和充值都由每一个class的构造、析构和拷贝运算符自动完成
  • 每一个class关联的type_info object(用以支持runtime type identification,RTTI)也经由vtbl被指出来
屏幕快照 2017-04-28 下午8.23.00.png

继承模型:

  • 直接继承:base class subobject的data members直接放置于derived class object中
    优点:紧凑而且有效率的存取
    缺点:基类成员改变都导致派生类的重新编译
屏幕快照 2017-04-28 下午10.02.19.png
  • 虚拟继承:多重继承中特有的概念,在派生类中加入虚类指针(增加寻址时间,相当于以时间换空间)
    class A
    class B1:public virtual A;
    class B2:public virtual A;
    class D:public B1,public B2;
    虚拟继承在一般的应用中很少用到,所以也往往被忽视,这也主要是因为在C++中,多重继承是不推荐的,也并不常用,而一旦离开了多重继承,虚拟继承就完全失去了存在的必要因为这样只会降低效率和占用更多的空间。

C++程序设计模型


  1. 程序模型(procedural model)
  2. 抽象数据类型模型(abstract data type model,ADT)
    提供一组表达式(public 接口),重载运算符操作
  3. 面向对象模型(object-oriented model)
    继承,共同相关类型由抽象基类封装起来
    通过指针或者引用来间接处理基类对象才体现多态

C++支持多态的方法:

  • 经由一组隐含的转化操作
    例如:shape *ps = new circle()
  • 经由virtual function机制
    例如:ps->rotate()
  • 经由dynamic_cast 和typeid运算符
    例如:circle *pc = dynamic_cast< circle* > (ps)

Class object的内存占用

  • 其 nonstatic data members 的总和大小
  • 对齐所填补的空间
    在32位计算机上,通常alignment位4bytes(32位),以使bus的“运输量”达到最高效率
  • 支持virtual而产生的额外负担
    指针类型告诉编译器如何解释某个地址中的内存内容及其大小,转型(cast)就是影响解释方式

相关文章

  • 第一章 关于对象

    C语言:数据与函数分开 声明一个struct Point3d 打印一个Point3d,定义函数或者宏 或者直接在程...

  • 第一章 关于对象

    简单对象模型(A Simple Object Model) 一个objects是一系列的slots。members...

  • 第一章 关于对象

    1 对象模型 1.1 简单对象模型 每个slot指向一个members,包括数据以及函数members本身不在o...

  • jQueryDom的操作(1)

    第一章 如何筛选jQuery对象 操作jQuery对象,如何创建HTML DOM对象和jQuery对象 区别 检...

  • 面向对象(未完成)

    面向对象 标签(空格分隔): 面向对象 第一章:面向对象(上) 什么叫面向对象 面向过程、面向对象、两者区别 构造...

  • 《JAVA编程思想》学习笔记:第1-4章(Java概述)

    第一章、对象导论 1.1 抽象过程 面向对象编程:(OOP,Object Oriented Programming...

  • 关于对象

    1、Java不需要销毁对象 ①作用域(scope):决定了其内定义的变量名的可见性和生命周期。 ②对象的作...

  • 关于对象

    #面向对象 学习了面向对象呢,简要就是说为一切都是对象。 比如生活中的东西,衣食住行这些等等。。。 那这个面对就是...

  • 关于this对象

    this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象的方...

  • 关于对象……

    嘉羿和苪萣正在谈论关于对象的事儿 嘉羿:我和我对象每天都要聊天,语音啊电话啊或者是视频。 苪萣:每天都要聊吗? 嘉...

网友评论

      本文标题:第一章 关于对象

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