c++中基類和派生類遵循型別相容原則:即可用派生類的物件去初始化基類的物件,可用派生類的物件去初始化基類的引用可用派生類物件的位址去初始化基類物件指標。
c++中動態繫結條件發生需要滿足2個條件:
1:只有指定為虛函式的成員函式才能進行動態繫結,成員函式預設為非虛函式,非虛函式不能進行動態繫結
2:必須通過基類型別的引用或指標進行函式呼叫
基類型別引用和指標的關鍵點在於靜態型別和動態型別可能不同:
1:什麼是靜態型別?就我的理解來說,所謂的靜態型別是指,當我們用上述引用或指標去呼叫非虛函式是,這是的引用和指標就是引種靜態型別的,它對非虛函式的呼叫是在編譯時就確定了
2:從靜態型別的對立來看,所謂的動態型別也很明顯,當這個引用或指標呼叫了虛函式時,它就是動態型別,它的行為要到程式執行時才能定義
(以上關於兩種型別的解釋僅僅是我自己的理解)
當我們用派生類去初始化基類的引用或指標後,加入呼叫的是非虛函式,那麼這時實際呼叫的函式是基類的函式;加入呼叫的是虛函式,那麼這是呼叫的是派生類自己定義的虛函式
下面是具體的例子來說明靜態型別和動態型別
class a;
class b:public a;
main:
a a;
b b;
a &c=b;
c.show();//show函式是虛函式,並且此時使用派生類的物件去初始化基類的引用,發生了動態繫結,呼叫的是實際類 型b的show()----"派生類的show"
c.get();//此時不滿足動態繫結的條件,c是靜態型別,結果是-------基類的get()
C 中的動態繫結
首先說明一下c 中的靜態繫結和動態繫結 靜態繫結 在編譯時刻,根據變數的靜態型別 變數宣告為基類還是派生類 來決定呼叫哪個函式,用基類宣告的,就呼叫基類的方法,用派生類宣告的就呼叫派生類的方法。動態繫結 在執行時刻,根據變數實際指向的物件型別 該變數指向基類還是派生類 來決定呼叫哪個函式。c 中對普...
C 中的動態繫結
c 中基類和派生類遵循型別相容原則 即可用派生類的物件去初始化基類的物件,可用派生類的物件去初始化基類的引用,可用派生類物件的位址去初始化基類物件指標。c 中動態繫結條件發生需要滿足2個條件 1 只有指定為虛函式的成員函式才能進行動態繫結,成員函式預設為非虛函式,非虛函式不能進行動態繫結 2 必須通...
C 中動態繫結
動態繫結 dynamic binding 將繫結 binding 即解析型別 成員和操作的過程從編譯時延遲到執行時。動態繫結適用於那些開發者知道某個特定的函式 成員或操作的存在,而編譯器不知道的情況。這種情況通常出現在操作動態語言 例如 ironpython 和com時。在這些情況下,如果不使用動態...