C 中對純虛函式和多型的理解

2021-07-23 14:05:47 字數 1523 閱讀 8379



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

⑴抽象類的定義:

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

⑵抽象類的作用:

抽象類的主要作用是將有關的操作作為結果介面組織在乙個繼承層次結構中,由它來為派生類提供乙個公共的根,派生類將具體實現在其基類中作為介面的操作。所以派生類實際上刻畫了一組子類的操作介面的通用語義,這些語義也傳給子類,子類可以具體實現這些語義,也可以再將這些語義傳給自己的子類。

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

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

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

一、純虛函式定義

純虛函式

是一種特殊的虛函式,它的一般格式如下:

class 《類名》

; 在許多情況下,在基類中不能對虛函式給出有意義的實現,而把它宣告為純虛函式,它的實現留給該基類的

派生類去做。這就是純虛函式的作用。

純虛函式可以讓類先具有乙個操作名稱,而沒有操作內容,讓派生類在繼承時再去具體地給出定義。凡是含有純虛函式的類叫做抽象類。這種類不能宣告物件,只是作為基類為派生類服務。除非在派生類中完全實現基類中所有的的純虛函式,否則,派生類也變成了抽象類,不能例項化物件。

二、純虛函式引入原因

1、為了方便使用

多型特性,我們常常需要在基類中定義

虛函式。

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

為了解決上述問題,引入了純虛函式的概念,將函式定義為純虛函式(方法:virtual returntype function()= 0;)。若要使派生類為非抽象類,則

編譯器要求在派生類中,必須對純虛函式予以過載以實現

多型性。同時含有純虛函式的類稱為

抽象類,它不能生成物件。這樣就很好地解決了上述兩個問題。

例如,繪畫程式中,shape作為乙個基類可以派生出圓形、矩形、正方形、梯形等, 如果我要求面積總和的話,那麼會可以使用乙個 shape * 的陣列,只要依次呼叫派生類的area()函式了。如果不用介面就沒法定義成陣列,因為既可以是circle ,也可以是square ,而且以後可能加上rectangle,等等.

三、相似概念

1、多型性

指相同物件收到不同訊息或不同物件收到相同訊息時產生不同的實現動作。c++支援兩種多型性:編譯時多型性,執行時多型性。

a.編譯時多型性:通過過載函式實現

b 執行時多型性:通過虛函式實現。

2、虛函式

虛函式是在基類中被宣告為virtual,並在派生類中重新定義的成員函式,可實現成員函式的動態過載

3、抽象類

包含純虛函式的類稱為抽象類。由於抽象類包含了沒有定義的純虛函式,所以不能定義抽象類的物件。

C 多型, 虛函式, 純虛函式

多型 不同物件接收相同的訊息產生不同的動作。多型包括 編譯時多型和 執行時多型 執行時多型是 通過繼承和虛函式來體現的。編譯時多型 運算子過載上。封裝可以隱藏實現細節,使得 模組化 繼承可以擴充套件已存在的 模組 類 它們的目的都是為了 重用。多型也有 重用的功能,還有解決專案中緊耦合的問題,提高程...

C 多型 虛函式和純虛函式的關係

c 多型意味著呼叫成員函式時,會根據呼叫函式的物件的型別來執行不同的函式 形成多型必須具備三個條件 1 必須存在繼承關係 2 繼承關係必須有同名虛函式 其中虛函式是在基類中使用關鍵字virtual宣告的函式,在派生類中重新定義基類中定義的虛函式時,會告訴編譯器不要靜態鏈結到該函式 3 存在基類型別的...

C 多型 虛函式 純虛函式和抽象函式

多型 虛函式 純虛函式和抽象函式 多型按字面的意思就是多種形態。當類之間存在層次結構,並且類之間是通過繼承關聯時,就會用到多型。c 多型意味著呼叫成員函式時,會根據呼叫函式的物件的型別來執行不同的函式。其主要是函式的多種形態 乙個函式實現多種功能,形式是乙個乙個覆蓋。例項如下 includeusin...