抽象類 純虛函式 虛函式

2021-08-05 21:10:25 字數 1550 閱讀 6145

抽象類是一種特殊的類,它是為了抽象和設計的目的為建立的,它處於繼承層次結構的較上層。

(1)抽象類的定義:

稱帶有純虛函式的類為抽象類。

(2)抽象類的作用:

抽象類的主要作用是將有關的操作作為結果介面組織在乙個繼承層次結構中,由它來為派生類提供乙個公共的根,也就是說抽象類是為派生類服務的。純虛函式作為基類中的乙個介面,該函式會根據不同的派生類具有不同的實現方式。

(3)使用抽象類時注意:

• 抽象類只能作為基類來使用,其純虛函式的實現由派生類給出。如果派生類中沒有重新定義純虛函式,而只是繼承基類的純虛函式,則這個派生類仍然還是乙個抽象類。如果派生類中給出了基類純虛函式的實現,則該派生類就不再是抽象類了,它是乙個可以建立物件的具體的類。

• 抽象類是不能定義物件的。

(1) 純虛函式定義

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

virtual

void func() = 0

(2)引入原因

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

2、在很多情況下,基類本身生成物件是不合情理的。

例如,動物作為乙個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理。  為了解決上述問題,引入了純虛函式的概念,將函式定義為純虛函式,則編譯器要求在派生類中必須予以重寫以實現多型性。同時含有純虛函式的類稱為抽象類,它不能生成物件。這樣就很好地解決了上述兩個問題。宣告了純虛函式的類是乙個抽象類。所以,使用者不能建立抽象類的例項,只能建立它的派生類(實現了基類中的純虛函式的定義)的例項。純虛函式最顯著的特徵是:它們必須在繼承類中重新宣告函式(不要後面的=0,否則該派生類也不能例項化),而且它們在抽象類中往往沒有定義。定義純虛函式的目的在於,使派生類僅僅只是繼承函式的介面。純虛函式的意義,讓所有的類物件(主要是派生類物件)都可以執行純虛函式的動作,但類無法為純虛函式提供乙個合理的預設實現。所以類純虛函式的宣告就是在告訴子類的設計者,「你必須提供乙個純虛函式的實現,但我不知道你會怎樣實現它」。

虛函式的定義

虛函式是相對於類來說的,只有類中的成員函式才可能是虛函式,另外需要注意,內聯函式、建構函式、靜態函式不能是虛函式。

virtual

void func()

上述表達需要在父類子類中同時宣告和定義,(實現的方式可以不同)。

虛函式主要是實現了多型,當定義乙個父類的指標指向子類物件時,虛函式的執行結果可以是子類中虛函式的定義。

子類沒有過載父類的虛函式是一件毫無意義的事情。因為多型也是要基於函式過載的(注意,再通乙個類中,函式過載是根據函式引數個數和型別的不同在程式編譯期間決定,稱為靜態聯編)。

靜態聯編:在程式鏈結階段就可以確定的呼叫。

動態聯編:在程式執行時才能確定的呼叫。

虛函式,純虛函式,抽象類

1 虛函式 include includeusing namespace std class animal 執行結果 2 純虛函式 抽象類 include includeusing namespace std class animal class mouse public animal void c...

多型,虛函式,純虛函式,抽象類

c 中,實現多型有以下方法 虛函式,抽象類,過載,覆蓋 多型性在object pascal和c 中都是通過虛函式 virtual function 實現的。這麼一大堆名詞,實際上就圍繞一件事展開,就是多型,其他三個名詞都是為實現c 的多型機制而提出的一些規則,下面分兩部分介紹,第一部分介紹 多型 第...

抽象類 純虛函式

在程式中,有些時候我們的基類是不需要例項化的,比如有乙個基類哺乳動物,這個在程式實現的時候沒有必要把他例項化出來。而只是乙個種群的抽象描述,也 無法進行例項化。所以在c 我們可以建立一種叫做抽象資料型別的類。這個類 只是用來繼承的,單獨沒有例項化,沒有意義。其實這也是減少了程式設計師編寫 後除錯的除...