c 學習 虛函式

2021-06-25 08:40:15 字數 586 閱讀 8330

虛函式學習

1.虛函式的關鍵字是virtual.

2.如果在父類中成員函式前加上virtual,則如果子類中定義了重名函式,則兩者會產生聯絡.

3.virtual函式的子子孫孫都是virtual的,管你在子類中說不說,但好習慣還是加上.

4.當向上造型(upcast)用父類指標或引用去訪問子類的虛函式時,會訪問子類定義的那個虛函式,而不是父類定義的虛函式。如果不用虛函式,將會呼叫父類的函式.

5.當用到虛函式時,折構函式也應該是虛函式,否則會出現執行了子類的函式,卻呼叫了父類的析構函式.

6.通過虛函式實現dynamic binding(動態繫結)

7.含有virtual函式的類,比一樣的,不含virtual的類要大一些,因為要加乙個指標來實現動態繫結.ps:可以用sizeof自己試一下.

8.那乙個多的指標叫vptr指向乙個叫做vtable的表,表中有所有的那個類的virtual函式的位址,不是物件的!通過這張表來實現dynamic bingding.

9.子類與父類虛函式的返回型別一般相同,否則會出錯,但有兩種情況可以,就是都返回本身的指標或引用.

C 學習(虛函式)

1 靜態聯編,動態聯編 將源 中的函式呼叫解釋為執行特定的函式 塊被稱為函式名聯編 在c語言中,沒有函式的過載,所以,在編譯過程中就可以完成函式的聯編,這種叫靜態聯編。而c 中,虛函式的使用,使得在編譯過程中我們無法得知使用的是哪乙個,所以編譯器 只能在程式執行時選擇正確的虛函式 這種叫動態聯編。2...

C 學習 (03)虛函式 虛指標 虛表

對於類的成員函式,如果在前面加上virtual,那麼這個成員函式就是虛函式,這個類就是帶有虛函式的類。帶沒有虛函式的類,與不帶虛函式的類之間有什麼區別呢?帶有虛函式的模擬不帶虛函式的類會多乙個指標,這個指標就是虛指標,而虛指標指向乙個表,這個表就叫做虛表。虛表裡面存的內容就是虛函式的位址。例子 in...

C 學習之 虛函式

靜態聯編 運算子過載 過載函式是通過 名字壓延 方法來實現。即在編譯時將函式名和引數結合起來創造乙個新的函式名,用新的名字替換原有名字。執行時多型性虛函式是在類定義中的函式原型宣告前加乙個關鍵字virtual。在派生類中重新定義時,它的函式原型 包括返回型別,函式名,引數個數和引數型別 必須與基類中...