C 中的虛函式

2021-09-12 21:36:13 字數 654 閱讀 3079

類和類的關係有以下三種:

同名函式之間有如下關係:

函式過載:同名同作用域不同參

隱藏:派生類隱藏了基類中的所有同名函式(存在,看不見)

覆蓋:派生類中同名同參的虛函式會覆蓋基類中同名同參的虛函式(發生在虛表的合併階段)

虛函式就是在成員方法之前加上virtual關鍵字。

成為虛函式的條件是能取位址,並且依賴物件呼叫。因此,

多型包括靜多型和動多型,靜多型是指函式過載和模板(其實模板就是讓編譯器實現函式過載),在編譯階段就可以決定呼叫那個函式。動多型是指虛函式,在執行階段才可以確定呼叫哪個函式。

看函式呼叫是靜多型還是動多型,就去看彙編**裡面call的是乙個具體的函式入口位址還是乙個暫存器,如果是函式位址,那說明是靜多型呼叫,如果是eax暫存器說明是動多型的呼叫,因為暫存器的值需要在執行時才能確定。

動多型的呼叫過程是,先檢視是否有虛函式指標,有的話就去根據偏移找到虛表,然後在執行時呼叫。

那麼什麼情況下發生動多型的呼叫呢?有兩個條件,一是指標呼叫虛函式,另乙個是物件要完整。

基類和派生類中的析構函式滿足同名覆蓋的關係。所以基類指標指向派生類物件的時候,基類中的析構要寫成虛析構。

C 中的虛函式 純虛函式

c 最重要的特性就是多型,而多型,就主要通過虛函式實現的。具體的實現過程是 基類中的函式定義為虛函式,派生類發生覆蓋 即函式名稱 引數列表 返回值型別完全相同 的情況下,派生類中的函式也會自動變成虛函式,不論加不加virtual關鍵字。此時,基類與子類物件中都會存在一張虛函式表 因為含有虛函式 具體...

C 中的虛函式

c 中的虛函式 virtual function 1.簡介 虛函式是c 中用於實現多型 polymorphism 的機制。核心理念就是通過基類訪問派生類定義的函式。假設我們有下面的類層次 class a class b public a 那麼,在使用的時候,我們可以 a a new b a foo ...

C 中的虛函式

c 中的虛函式 一 雖然很難找到一本不討論多型性的c 書籍或雜誌,但是,大多數這類討論使多型性和c 虛函式的使用看起來很難。我打算在這篇文章中通過從幾個方面和結合一些例子使讀者理解在c 中的虛函式實現技術。說明一點,寫這篇文章只是想和大家交流學習經驗因為本人學識淺薄,難免有一些錯誤和不足,希望大家批...