《深度探索 C++ 對(duì)象模型》讀書筆記——第一章 關(guān)于對(duì)象
C++ 對(duì)象模型
·語(yǔ)言中直接支持面向?qū)ο蟪绦蛟O(shè)計(jì)的部分
·對(duì)于各種支持的底層實(shí)現(xiàn)機(jī)制
virtual table
理解底層實(shí)現(xiàn)模型的好處有
·寫出效率較高的代碼
·有更好的自信心
關(guān)于對(duì)象
布局、存取時(shí)間來(lái)自于
·virtual: virtual function, virtual base class
·derived class 與 base class 的轉(zhuǎn)換
class data members: static, nonstatic
class member functions: static, nonstatic, virtual
1.簡(jiǎn)單對(duì)象模型 Simple Object Model
slots
指向成員的指針
2.表格驅(qū)動(dòng)對(duì)象模型
data member table
member function table: slots
Member Table 對(duì)象模型
支持 virtual functions
3.C++ 對(duì)象模型
virtual table (vtbl)
vptr: constructor, destructor, copy assignment
type_info object for RTTI(運(yùn)行時(shí)類型識(shí)別)
優(yōu)點(diǎn):空間和存取時(shí)間的效率
缺點(diǎn):會(huì)導(dǎo)致重新編譯
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]
關(guān)鍵字所帶來(lái)的差異
組合而非繼承是把 C 和 C++ 結(jié)合在一起的唯一可行方法
conversion 運(yùn)算符
operator C_point()
{
return _c_point;
}
對(duì)象的差異
C++ 程序設(shè)計(jì)模型直接支持三種程序設(shè)計(jì)典范 programming paradigms
·程序模型 procedural model
·抽象數(shù)據(jù)類型模型 abstract data type model
·面向?qū)ο竽P?object-oriented model
C++ 支持多態(tài)的方法
·隱含轉(zhuǎn)化 Shape* ps = new circle();
·virtual function ps->rotate();
·dynamic_cast, typeid
if (Circle* pc = dynamic_cast<Circle*>(ps))
{
...
}
class object 內(nèi)存
·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 閱讀(141)
評(píng)論(0) 編輯 收藏 引用