虛函式學習
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。在派生類中重新定義時,它的函式原型 包括返回型別,函式名,引數個數和引數型別 必須與基類中...