C 之虛函式和多型

2021-05-06 16:25:36 字數 1082 閱讀 7902

1.虛函式

簡單的說,虛函式就是在函式原型前加上virtual關鍵字。函式一旦被宣告為虛函式,即使類在改寫它的時候沒有將其宣告為虛函式,它從該點的繼承層次結構中仍然是虛函式。如果基類中乙個函式被宣告為虛函式,在若干子類中有著不同的實現,那麼我們在建立若干子類的不同物件時,可以用基類的指標或者引用來指明子類物件並且呼叫相應子類的函式。

虛函式的定義方式如下:

virtual  函式返回型別  虛函式名稱(引數列表)

規定如下: ◎類的靜態成員函式不可以定義為虛函式;

◎類的建構函式不可以定義為虛函式;

◎非類的函式不可以定義為虛函式。

2.純虛函式

純虛函式是在宣告虛函式時初始化為0的函式。

virtual

void

print() 

const=0

; 3.抽象類

簡單的說,帶有乙個或多個未實現的純虛函式的類是抽象類。如果乙個類繼承自乙個抽象類,但它沒有全部實現父類裡面所有的純虛函式,那麼那些純虛函式在子類中仍然是純虛的,這個子類仍然是抽象類,仍然不能例項化物件。

抽象類是一種特殊的類,只能作為基類來使用,其純函式的實現由派生類給出。雖然不能例項化抽象類,但我們可以宣告乙個抽象類的指標和引用,在例項化物件時,可以用不同的子類來實現,從而實現多型性操作。只有當派生類將基類中的所有的純虛函式都實現的時候,它才不再是抽象類。

4.多型

從廣義上說,多型性是指一段程式能夠處理多種型別物件的能力。在c++語言中,多型性可以通過強制多型、過載多型、型別引數化多型、包含多型等多種實現形式。所謂多型就是通過類的繼承,使得同乙個函式可以根據呼叫他的物件的型別作出不同的響應。它也繼承和過載共同構成物件導向的3大程式設計特性。多型性通過虛函式來實現,當我們用基類的指標來呼叫虛函式時,程式會根據物件的屬性選擇其自身的函式實現。即使程式設計師不知道物件型別,程式仍然可以作出適合該物件型別的行為。

c++語言支援兩種型別的多型:一種是編譯時的多型(靜態多型),另一種是執行時的多型(動態多型)。在編譯時的多型是通過靜態聯編實現的,而在執行時的多型則是通過動態聯編實現的。

C 多型之虛函式

問題 用基型別的指標指向派生類物件時,通過這個指標來訪問該物件,這是會出現訪問到的只是從基類繼承來的同名成員。解決方法 在基類中將這個同名函式宣告為虛函式,這樣就可以通過基型別的指標,訪問不同派生類的物件產生不同的行為,從而實現執行過程的多型。語法 virtual 函式型別 函式名 形參表 注意 必...

c 多型和虛函式

c 有三大特性 封裝,繼承,多型 多型是物件導向程式設計的乙個重要特徵,多型就是乙個東西有多重狀態,具有不同功能的函式可以用乙個函式名,這樣就可以用乙個函式名實現不同的功能 靜態多型和動態多型靜態多型是利用過載實現的,在程式編譯時確定要呼叫的是哪個函式,也稱為編譯時多型。動態多型是利用虛函式實現的,...

c 虛函式和多型 虛函式表

參考 1 c primer plus 第六版 2 中國大學慕課 程式設計與演算法 三 在類的定義中,前面有virtual關鍵字的成員函式就是虛函式 class a 類外函式定義 void a function 說明 1 virtual關鍵字只需要在類定義裡的函式宣告時加上,函式定義時不用加 2 建構...