Geekban極客班 C 第五周

2021-07-13 08:36:19 字數 1778 閱讀 5997

只要類裡帶有虛函式,物件裡就會多乙個指標。

繼承函式是繼承函式的呼叫權父類有虛函式則子類一定虛函式

虛指標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...