第一章 关于对象
来源:互联网 发布:clasence 软件 编辑:程序博客网 时间:2024/05/29 13:19
1. C++在布局以及存取时间上主要的额外负担是由virtual引起的,包括:
i. virtual function机制:支持一个有效率的“执行期绑定”;
ii. virtual base class:用以实现“多次出现在继承体系中的base class,有一个单一而被共享的实例”。
2. C++对象模式
i. 简单对象模型
一个slot对应一个members,members本身并不存放在object之中,只有“指向member的指针”才放在object内。
ii. 表格驱动对象模型
一个data member table和一个member function table
iii. Nonstatic data members被配置于一个class object之内,static data members则被存放在个别的class object之外。Static 和 nonstatic function members也被放在个别的class object之外。对于虚函数:
a. 每一个class产生一堆指向virtual functions的指针,放在表格之中,这个表格被称为virtual table(vtbl)。
b. 每一个class object被安插一个指针,指向相关的virtual table,这个指针被称为vptr。
3. C++中凡处于同一个access section的数据,必定保证以其声明顺序出现在内存布局当中。但当被放置在多个access sections中的各笔数据,排列顺序就不一定了。base classes和derived class的data members的布局也未有谁先谁后的强制规定。
4. 只有通过pointer和reference的间接处理,才支持OO程序设计所需的多态性质。
5. 在C++中,多态只存在于一个个的public class体系中,Nonpublic的派生类行为以及类型为void*的指针可以说是多态的,但它们并没有被语言明确地支持,也就是说它们必须由程序员通过显式的转换操作来管理。
6. C++支持多态的方式
i. 经由一组隐式的转化操作。例如把一个derived class指针转化成一个指向其public base type的指针:
shape *ps = new circle()
ii. 经由virtual function机制:
ps->rotate();
iii. 经由dynamic_cast和typeid运算符
if(circle *pc = dynamic_cast<circle*>(ps) )...
7. class object的大小组成有:
i. 其nonstatic data members的总和大小;
ii. 加上任何由于内存对齐的需求而填补上去的空间;
iii. 加上为了支持virtual而由内部产生的任何额外负担。
- 第一章 关于对象
- 第一章 关于对象
- 第一章 关于对象
- 第一章 关于对象
- 第一章 关于对象笔记
- 第一章 关于对象
- 第一章 关于语言,对象
- 第一章 关于对象
- 第一章 关于对象
- 第一章 关于对象(二)
- C++ 对象模型 第一章 关于对象
- 第一章:关于对象(Object Lesson)
- 深度探索C++对象模型第一章 关于对象
- 【深度探索C++对象模型】第一章 关于对象
- 深入探索C++对象模型 第一章 关于对象
- C++对象模型——关于对象(第一章)
- C++对象模型——关于对象(第一章)
- 《深入探索C++对象模型》笔记之第一章关于对象
- AOE网上的关键路径
- mysql 插入前 锁表问题
- AndroidUiAutomator使用Jenkins搭建持续集成测试系统Ⅱ
- python学习笔记之数据类型与运算符
- Java中怎么去掉数字字符串开头的0
- 第一章 关于对象
- android 4.2修改设置菜单的背景颜色
- meta标签详解
- web.xml is missing and <failOnMissingWebXml> is set to true
- ubuntu中sublime 使用输入法
- 18、data自定义数据
- HTML5中video-高度宽度
- Network学习7_Java之Pcap文件解析(二:建立数据结构)
- 81. Search in Rotated Sorted Array II