深度探索C++對象模型學習筆記——構造語意學

c++在佈局以及存取時間上主要的額外負擔是由virtual引起,包括:
1. virtual function機制(運行期綁定runtime binding)
2. virtual base class機制(多次出現在繼承體系中的base class,單一卻被共享的實體)
3. derived class和base class的轉換(dynamic_case轉換)


c++中:
有兩種數據成員:靜態和非靜態
有三種成員函數:靜態、非靜態、虛函數。


C++默認構造函數:在需要的時候被編譯器產生出來
如:
Class Foo{ public: int val; Foo* pNext;}; // 不會產生出默認構造函數


默認構造函數產生的條件(編輯器自動產生):
1. 帶有默認構造函數的成員類對象
如:
class Foo{ public: Foo(){}; Foo(int){...};};
class Bar{ public: Foo foo; char* str;};
2. 帶有默認構造函數的基類
3. 帶有一個虛函數的類
4. 帶有一個虛基類的類
class X { public: int i;};
class A: public virtual X { public: int j;};
class B: public virtual X { public: double d;};
class C: public A, public B { public: int k; };

 

默認拷貝構造函數產生的條件(編輯器自動產生):
1. 當class內含一個memeber object,而後者的class聲明有一個拷貝口函數。
2. 當class繼承自一個base class,而後者存在一個拷貝構造函數時。
3. 當class聲明瞭一個多個virtual functions時。
4. 當class派生自一個繼承串鏈,其中有一個或多個virtual base classes時。
默認拷貝構造函數產生的條件就是bitwise copy semantics無效的時候。


必須使用初始化列表的情況(初始化列表是在explicit user code之前執行):
1.初始化一個reference member
2.初始化一個const member
3.調用一個base class的constructor,而它擁有一組參數時
4.調用一個member class的constructor,而它擁有一組參數時

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章