虛函式 多型
(繼承關係的多個型別)
通過虛函式實現。
關鍵字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...