posts - 183,  comments - 10,  trackbacks - 0

《深度探索 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)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理