virtual虛函式的用法

2021-07-12 01:37:07 字數 1132 閱讀 7817

根據虛函式的不同位置,有著不同的作用。大致分為3類:虛擬繼承,虛函式,純虛函式

(1)虛擬繼承

class a;

class b : virtual public a

;class c : virtual public a

;class d : public c, public b

;int main(int argc, char *argv)

編譯結果:

b::fun()

c::fun()

可以看出利用虛函式可以實現多型,即實現了不同物件使用相同的介面實現了不同的功能。

虛函式這裡還有個比較重要的知識點,將用於基類的析構函式設定虛函式的好處,在我的上篇部落格中有總結。

(3)純虛函式

純虛函式是在基類中宣告的虛函式,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中實現純虛函式的方法是在函式原型後加「=0」

virtual

void funtion()=0;

純虛函式的幾個概念:

《1》帶有純虛函式的類為抽象類

《2》繼承純虛函式的類,且沒有派生類沒有對基類中的純虛函式進行重寫,則這個派生類也為抽象類。

《3》抽象類不能例項化物件

《4》派生類繼承了純虛函式,並且對純虛函式的成員函式進行了重寫,這個派生類就成為了具體類。

純虛函式的作用:

為了方便使用多型特性,我們常常需要在基類中定義虛函式。

在很多情況下,基類本身生成物件是不合情理的。例如,動物作為乙個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理。

為了解決上述問題,引入了純虛函式的概念,將函式定義為純虛函式(方法:virtual returntype function()= 0;),則編譯器要求在派生類中必須予以重寫以實現多型性。同時含有純虛函式的類稱為抽象類,它不能生成物件。這樣就很好地解決了上述兩個問題。

純虛函式是為你的程式制定乙個標準,即只要你繼承了我,就必須按照我的標準來,實現我所有的方法,否則你也是虛擬的,即為了提高**的通用性,讓所有繼承它的子類全部按照同一標準來工作

class a;

class b : public a

C 中virtual(虛函式)的用法

在物件導向的c 語言中,虛函式 virtual function 是乙個非常重要的概念。因為它充分體現了物件導向思想中的繼承和多型性這兩大特性,在c 語言裡應用極廣。比如在微軟的mfc類庫中,你會發現很多函式都有virtual關鍵字,也就是說,它們都是虛函式。難怪有人甚至稱虛函式是c 語言的精髓。那...

virtual 虛函式

virtual 虛函式 下面是對c 的虛函式這玩意兒的理解。一,什麼是虛函式 如果不知道虛函式為何物,但有急切的想知道,那你就應該從這裡開始 簡單地說,那些被virtual關鍵字修飾的成員函式,就是虛函式。虛函式的作用,用專業術語來解釋就是實現多型性 polymorphism 多型性是將介面與實現進...

虛函式(virtual)

上面提到動態多型主要通過虛函式機制實現,這裡介紹以下虛函式。和普通的函式宣告方式相同,只要在函式的返回值前加上virtual關鍵字,該函式就為虛函式,即virtual 函式型別 函式名 形式引數 虛函式的作用 允許通過基類的指標或引用來訪問基類和派生類的同名函式。include using name...