《深度探索 C++ 对象模型》读书笔记——第一章 关于对象
C++ 对象模型
·语言中直接支持面向对象程序设计的部分
·对于各种支持的底层实现机制
virtual table
理解底层实现模型的好处有
·写出效率较高的代码
·有更好的自信心
关于对象
布局、存取时间来自于
·virtual: virtual function, virtual base class
·derived class 与 base class 的转换
class data members: static, nonstatic
class member functions: static, nonstatic, virtual
1.简单对象模型 Simple Object Model
slots
指向成员的指针
2.表格驱动对象模型
data member table
member function table: slots
Member Table 对象模型
支持 virtual functions
3.C++ 对象模型
virtual table (vtbl)
vptr: constructor, destructor, copy assignment
type_info object for RTTI(运行时类型识别)
优点:空间和存取时间的效率
缺点:会导致重新编译
bptr
(*px->vtbl[2])(px);
(*px->vtbl[1])(px);
_delete(px);
vptr
virtual table
-----
address -> type_info for X
address -> X::~X()
address -> X::foo()
-----
pt->vtbl[0]
pt->vtbl[1]
pt->vtbl[2]
关键字所带来的差异
组合而非继承是把 C 和 C++ 结合在一起的唯一可行方法
conversion 运算符
operator C_point()
{
return _c_point;
}
对象的差异
C++ 程序设计模型直接支持三种程序设计典范 programming paradigms
·程序模型 procedural model
·抽象数据类型模型 abstract data type model
·面向对象模型 object-oriented model
C++ 支持多态的方法
·隐含转化 Shape* ps = new circle();
·virtual function ps->rotate();
·dynamic_cast, typeid
if (Circle* pc = dynamic_cast<Circle*>(ps))
{
...
}
class object 内存
·nonstatic data members
·alignment
·virutal(virtual functions, virtual base class)
dynamic_cast<Base*>
OB: object-based
OO: object-oriented
posted on 2011-05-25 18:48
unixfy 阅读(137)
评论(0) 编辑 收藏 引用