只要類裡帶有虛函式,物件裡就會多乙個指標。
繼承函式是繼承函式的呼叫權,父類有虛函式則子類一定虛函式。
虛指標vptr指向虛表vtbl,虛表中存放虛函式指標。
c++編譯器遇到函式呼叫,有兩種方式:靜態繫結 動態繫結
動態繫結的三個條件
1. 必須是通過指標呼叫
2. 指標向上轉型
3. 呼叫的是虛函式。
動態繫結看p指標指向哪兒。
(*(p->vptr)[n])(p)
(* p->vptr
[n])(p)
b b;
aa=(a)b;
a.vfunc1();
通過物件呼叫函式。屬於靜態繫結,call ***(***為位址)
a* pa=
new b;
pa->vfunc1();
滿足動態繫結的三個條件,通過指標呼叫、向上轉型、呼叫的是虛函式
const一般只能放在成員函式後,不能加在全域性函式之後。
加了const,表示不修改資料。
const算作函式的簽名
設計共享時,應該考慮資料變化:單獨拷貝乙份去改。
這兩個函式可能被用來改寫。所以必須用copy on write
呼叫的是常量字串,不必做copy on write
當成員函式const和non-const版本同時存在,常量物件只能呼叫常量版本,非常量物件只會呼叫非常量版本。
void* myalloc(size_t size)
void myfree(void *ptr)
inline
void* operator
new(size_t size)
inline
void* operator
new(size_t size)
inline
void
operator
delete(void* ptr)
inline
void
operator
delete(void* ptr)
class foo
foo* p=new foo;
分解為:
try{
void* mem=operator
new(sizeof(foo));
p=static_cast
(mem);
p->foo::foo();
delete p;
分解為
p->foo();
operator delete(p);
Geekban極客班C 第四周
operator double const 轉換函式 fraction f 3,5 double d 4 f operator double const為轉換函式,將物件的型別轉換為double。在執行d 4 f,編譯器先尋找是否過載了 符合表示式的要求,若沒有在找是否有轉換函式,改變f的型別。on...
Geekban極客班 第三週
template class queue類queue中有另乙個類sequence的物件c has a的關係 乙個類中有另乙個類的物件。構造由內而外 先呼叫內部的預設建構函式,再呼叫外部的建構函式。編譯器自動呼叫內部預設的建構函式,若要呼叫其他建構函式,需要自己呼叫。析構由外而內 先呼叫外部的析構函式...
極客班 C (上)第二週學習筆記
今天在 首頁上看到一句話 程式設計師之所以犯錯誤,不是因為他們不懂,而是因為他們自以為什麼都懂。私覺很有道理,但在自己與他人對問題出現分歧時,還是願堅持第一先相信自己。這兩周課程主要講了類建立方面需要注意的東西。第一周講的是class without pointer member 第二週講的是cla...