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,而它擁有一組參數時