關於虛函式

2021-07-04 20:30:22 字數 726 閱讀 3727

1.(int*)(*aobj)得到了虛函式表指標的位址&vptr

2.(int*)*(int*)(*aobj)得到虛函式表指標vptr 指標的型別是(int*),這時需要轉化下

3.vptr是指向vptr table,其實就是指向乙個陣列,陣列元素是函式指標。 

(int*)*(int*)(*aobj) 指向陣列第乙個元素  所以*((int*)*(int*)(*aobj))就是functiona的位址 

(int*)*(int*)(*aobj) + 1 指向陣列第二個元素,所以*((int*)*(int*)(*aobj) + 1) 就是functionb的位址

4.funca(); funcb(); 這樣就是呼叫相應的虛函式

關於虛函式

虛函式的作用是實現 動態聯編 也就是在程式的執行階段動態地選擇合適的 成員函式 在定義了虛函式後,可以在基類的 派生類中對虛函式重新定義,在派生類中重新定義的函式應與虛函式具有相同的 形參個數和形參型別。以實現統一的介面,不同定義過程。如果在 派生類中沒有對虛函式重新定義,則它繼承其 基類的虛函式 ...

關於C 虛函式 純虛函式

1.虛函式與純虛函式的區別 答 定義乙個函式為虛函式,不代表函式為不被實現的函式,定義它為虛函式是為了允許用基類的指標來呼叫子類的這個函式 定義乙個函式為純虛函式,才代表函式沒有被實現,定義他是為了實現乙個介面,起到乙個規範的作用,規範繼承這個類的程式設計師必須實現這個函式。2.基類中定義的虛函式,...

關於虛函式和虛繼承

基類中無虛函式,派生類中有虛函式,基類的指標指向派生類物件 指向的是派生類中基類的起始部分 delete 時只析構基類的物件而不析構派生類的物件。基類指標指向派生類的的情況下,基類的虛構要設為虛析構。虛表合併時向內層合併,虛表合併時會先拷貝乙份副本,然後合併的時候使用副本合併。虛函式表的生成在編譯器...