《深度探索 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 閱讀(141)
評論(0) 編輯 收藏 引用