c++对象模型读书笔记一

原创 2002年05月13日 09:32:00

1、什么是C++对象模型
  1、语言中直接支持面向对象程序设计的部分
  2、各种支持的底层实现机制

2、C语言是面向过程的:
   语言本身没有支持数据和函数之间的关联性,是程序性的,分布在各个以功能函数为导向的函数中
   他们处理的是共同的外部数据。
   C++用独立的“抽象数据类型”ADT实现

3、C++在布局以及存取时间上主要额外负担的VIRUTAL引起的
   1、virtual function机制
   2、virtual base class多次继承系统中的基类,有一个单一而被共享的实体

4、C++有两种类成员数据类型[class data type]:static,nonstatic
   有三种类成员函数类型[class member function]:static,nonstatic,virtual

5、C++对象模型
   nonstatic data member非静态数据成员被置于类对象中
   static data member静态成员函数被置放在所有类对象之外[被放置在程序中的data segment中]
   static function和nonstatic function也放在类对象之外
     static function在我看来类似于nonmember function
   virtual function
     1、每一个类产生一对指向virtual function的指针,放置在表格中virtual table(vtbl)
     2、类对象添加了一个指针,指向vtbl,为vptr

 6、在虚拟继承情况下,base class不管在继承串连中被派生过多少次,永远只存在一个实体subobject

 7、关键词struct和class的差异:
    struct体现了数据萃取的概念
    class体现了adt(abstract data type)概念
    我看来只要是思想上的差异,没有其他的差别

 8、C++程序设计模型直接支持三种“程序设计典范”,也就是不只是OO了
    1、程序模型:面向过程的设计
    2、抽象数据类型模型:我看来解释数据萃取型STRUCT
    3、面向对象模型

 9、一个指针,不管它指向哪一个数据类型,指针本身需要的内存大小是固定的,指向不同类型之各指针之间
   的差异,即不在其指针表示法的不同,也不在其内容的不同,而在于它寻址出来的OBJECT类型的不同,我
   看来指针的类型就是为了通知编译器,让编译器的有不同的处理方式

 10、多态就是指使用虚函数吗?

 11、当一个基类被直接初始化(或者被指定为)一个继承类时,继承类就会被切割,以塞进较小的基类内存中

 12、一个类如果没有自定义的构造函数,编译器会生成一个却省的构造函数,但是这个构造函数是没有具体作用的
    被合成的构造函数,只满足编译器的需要,而不是满足程序的需要
    合成的构造函数只对基类对象和类对象成员函数的初始化,不对其他非静态DATA MEMBER初始化
    不是任何没有却省构造函数的类都会被合成出一个却生构造函数

 13、内联函数有静态连接,不会被档案以外者看到,如果内联函数很复杂,不适合做成内联函数,编译器会
     合成一个明确的、非内联的函数实体

  14、如果一个类含有一个或者一个以上的类对象成员函数,类的构造函数会调用每个类对象的却生构造函数

  15、拷贝构造函数是类的一个参数是其类名的构造函数,如果类中用户没有明确定义,内部是以所谓的DEFAULT
      memberwise initialization,即却省的对每个成员函数初始化手法完成
      根据bit来拷贝构造函数

  16、坚持所有的member的初始化操作在member initialization list中完成,初始化顺序不是按照initialization
      中的顺序完成,是按照类中成员定义的顺序完成,编译器编译时将initialization放置在构造函数用户自定的编码前

  17、一个空类大小不是为空的,有一个隐讳的1字节,那时编译器安插进取的一个char,使得这个类在内存中分配
     独一无二的地址。[我不知道是否所有的编辑器都是如此?]

  18、类的大小跟机器和编辑器有关,受到三种因素的印象
     1、语言本身所造成的额外负担
     2、编译器对特殊情况进行的优化处理
     3、alignment的限制,alignment就是将某数的整倍数,例如32位计算机上,一般为4字节
    
  19、不管类产生多少个对象,静态数据成员永远只存在一份实体

 

《深度探索C++对象模型》读书笔记——关于对象【for_wind】

//整理之,分享之,欢迎指正。for_wind 1、C与C++的区别:       概括来说,C程序中程序性地使用全局数据[注1]。而C++采用ADT(abstract data tpye)或...
  • for_wind
  • for_wind
  • 2014年03月28日 14:08
  • 1384

[读书笔记] 深入探索C++对象模型-第一章《关于对象》

最新在看深入探索C++对象模型(Inside C++ object model),看的同时针对一些之前没有留意或者理解不深的内容整理一下读书笔记,方便之后复习,也希望可以帮助到有同样疑惑的人。 下面是...
  • beyongwang
  • beyongwang
  • 2016年08月21日 21:14
  • 594

《C++对象模型》读书笔记

c++ 对象模型 侯捷
  • daviemeng
  • daviemeng
  • 2017年06月19日 21:31
  • 85

C++对象模型-读书笔记

1. 简单对象模型: 一个object是一系列的slots,每一个slot指向一个members。Members按其声明次序,各被指定一个slot。...
  • huanzai2
  • huanzai2
  • 2014年12月03日 21:33
  • 684

C++对象模型之简述C++对象的内存布局

在C++中,有两种类的成员变量:static和非static,有三种成员函数:static、非static和virtual。那么,它们如何影响C++的对象在内存中的分布呢? 当存在继承的情况下,其内存...
  • ljianhui
  • ljianhui
  • 2015年05月22日 02:28
  • 9748

《深入理解C++对象模型》读书笔记(一)

1、           C++类对象模型的中包括非静态成员变量和虚函数表指针,其他静态成员变量和成员函数均放在对象模型之外,所有的对象示例均可以共同使用。如此可以节省访问的时间和空间效率。   ...
  • zhiren2011
  • zhiren2011
  • 2015年07月31日 10:49
  • 1072

《Effictive C++》读书笔记(一)

一.让自己习惯C++ 1.      视C++为一个语言集合,C语言基础,面向对象部分,Template,STL。C++感觉好博大精深,现在貌似还是第二个阶段,想起刚学C++那会儿,一直用着C++的语...
  • puppet_master
  • puppet_master
  • 2015年08月12日 13:58
  • 1019

C++对象的内存模型

转载自:http://c.biancheng.net/cpp/biancheng/view/2995.html点击打开链接 当对象被创建时,编译器会为每个对象分配内存空间,包括成员变量和成员函数。 ...
  • chengonghao
  • chengonghao
  • 2016年04月01日 09:25
  • 1306

深度探索c++对象模型

所谓知己知彼,百战不殆。只有深入了解了c++对象的内存布局,我们才能更熟练运用c++这门语言。 运行环境vs2013一单继承和多继承的结合class C { public: C() :c(1...
  • db199410
  • db199410
  • 2016年06月16日 17:40
  • 375

c++对象内存模型【内存布局】

#类中的元素 0. 成员变量   1. 成员函数   2. 静态成员变量   3. 静态成员函数   4. 虚函数   5. 纯虚函数 #影响对象大小的因素 0. 成员变量   ...
  • IT_YUAN
  • IT_YUAN
  • 2014年04月28日 16:30
  • 11862
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++对象模型读书笔记一
举报原因:
原因补充:

(最多只允许输入30个字)