C Primier學習筆記2 虛函式

2021-07-30 13:26:20 字數 838 閱讀 2686

虛函式 多型

(繼承關係的多個型別)

通過虛函式實現。

關鍵字virtual告訴編譯器不應當完成早繫結,而是自動實現晚繫結

/執行時繫結所必須的所有機制。動態繫結只有當通過指標或者引用呼叫虛函式時才會發生。編譯器為每個包含虛函式的類建立乙個表,放置特定類的虛函式位址,秘密設定乙個指標,指向上述表。做多型呼叫時,編譯器靜態獲取vptr,並在表中查詢函式位址的**,這樣就能呼叫正確的函式使晚繫結發生。

補充:析構函式可以是虛函式,所有的派生類的析構函式都將自動變為virtual型,不會出現由於析構函式未被呼叫而導致的記憶體洩漏(虛函式採用虛呼叫的辦法,可以在只有部分訊息的情況下工作,適合知道介面不知道準確型別的函式);但建構函式不可以是虛函式,建立物件,勢必要知道物件的準確型別。建構函式可以過載,析構函式不能過載(建構函式根據引數不同實現過載,析構函式沒有引數)。

根據下面具體的題目分析:

struct a

virtual void bar()

a()};struct b:a

void bar()

};a *p=new b;

p->foo();

p->bar();

輸出為:

a *p=newb;// a類指標指向乙個例項化物件b, b類繼承a類,先呼叫父類的無參建構函式,bar()輸出bar,b類沒有自己顯示定義的建構函式。

p->foo();//執行b類裡的foo()函式,因為foo不是虛函式,所以直接呼叫父類的foo函式,輸出foo

p->bar();//執行b類的bar()函式, 該函式為虛函式,呼叫子類的實現,輸出b_bar

輸出:barfoob_bar

Tensorflow2 0學習筆記(2) 常用函式

對應元素的加減乘除 次方 print tf.square a 平方 a tf.ones 3 2 b tf.fill 2 3 1.print tf.matmul a,b tf.matmul 矩陣1,矩陣2 data tf.data.dataset.from tensor slices 輸入特徵,標籤 ...

C Primier讀書筆記(第六章2)

頂層的const在過載時無法相互區分,底層的可以 void lookup int i void lookup const int i void lookup int i void lookup int const i 重複宣告 void lookup char ch void lookup cons...

Python學習筆記 2 判斷str型別的函式

相信大家都喜歡表情包吧 話說學習python一定要堅持,持之以恆,萬事開頭難嘛 哈哈,稍微皮一下 經過整理 1 isdigit 判斷 str 是否為數字 i 123 print i.isdigit if i.isdigit print yes 輸出結果為 true yes2 isalpha 判斷 s...