《深度探索C++对象模型》

第一章 对象

C++支持封装,这一点并未给它带来任何空间或执行期的不良后果。C++在布局以及存取时间上的主要额外负担是由virtual引起的,包括:

1)virtual function机制

用以支持一个有效的“执行期绑定”(runtime binding)

2)Virtual base class

用以实现“多次出现在继承体系中的base class”有一个单一而被共享的实例

1.1 封装

类包括成员变量(class data members)和成员函数(class member functions)

1)两种class data members:static和nonstatic

2)三种class member functions:static、nonstatic和virtual

Nonstatic data members被配置于每一个class object之内,static data member则被存放在个别的class object之外。Static和nonstatic function members也被放在个别的class object之外。Virtual functions则通过以下步骤实现:

1)每一个class object产生出一堆指向virtual functions的指针,放在表格(virtual table(vtbl))之中。

2)每一个class object被安插一个指针(vptr),指向相关的virtual table。Vptr的设定和重置都由构造函数、析构函数、拷贝赋值函数自动完成。每一个关联的type_info object(用以支持runtime type identification,RTTI)也由virtual table指出,通常放在表格的第一个slot。

 1.2 继承

单一继承、多重继承、虚继承

1.3 多态

C++以下列方法支持多态:

1)经由一组隐式转化操作(将派生类指针转换为指向其基类的指针 shape *ps = new Circle())

2)经由virtual function机制

3)经由dynamic_cast和typeid运算符

1.4 其他

1.4.1 C++程序设计范式

C++程序设计模型支持三种程序设计范式(programming paradigms):

1)程序模型(procedural model)

2)抽象数据类型模型(abstract data type model)

3)面向对象模型(object-oriented model)

 1.4.2 类对象内存大小

需要多少内存才能表现一个class object?一般而言需要:

1)其nonstatic data members的总和大小

2)加上任何由于alignment的需求而填补(padding)上去的空间

3)加上为了支持virtual而由内部产生的任何额外负担

1.4.3 OO与OB

OO(object-oriented)具有多态特性从而更具弹性,OB(object-oriented),封装的非多态性,空间更紧凑,效率更高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值