1. 程式人生 > >c++繼承和組合,多型,虛擬函式(c++後期繫結的本質)

c++繼承和組合,多型,虛擬函式(c++後期繫結的本質)

組合和繼承,實現了程式碼的可擴充套件性和相容性。 多型是在虛擬函式上得到了支援。 多型的原理,函式的呼叫繫結: 把函式的呼叫和函式體相關聯稱為捆綁。當捆綁是在程式執行之前完成的,稱為早期捆綁。c語言只支援早期繫結。晚期捆綁,物件通過自身得到類的資訊,然後找到合適的函式體,執行呼叫,這個過程是後期繫結,或者動態繫結。 c++是如何實現晚期繫結的: 當一個類的函式是虛擬函式的時候,這個類就有一個靜態函式指標來繫結這個類的函式體的具體實現了,而這個指標這個類產生的物件公用的。 編譯器在編譯的時候,發現如果是虛擬函式的呼叫的時候,那麼自行處理,呼叫物件指向具體虛擬函式的指標來執行。 所以後期繫結本質上是通過子類各自有一個指標指向自己的具體函式體來實現,所謂後期繫結。 這裡寫圖片描述

instrucment 是一個父類,wind percussion string brass 是各自子類,都有一個隱藏指標vptr,來指標各自函式體的位置