C 中多型與虛函式的學習

2021-10-04 07:46:24 字數 1852 閱讀 4732

本文內容摘錄自:從零開始學c++程式設計,僅作為入門使用

如果基類指標指向派生類的物件之後再呼叫其成員函式,結果仍然是呼叫到基類的成員函式。

可以通過下面的程式看出來:

#include

using

namespace std;

class

vehicle

void

stop()

};class

aircraft

:public vehicle

void

stop()

};class

car:

public vehicle

void

stop()

};intmain()

執行之後的結果如下圖所示:

ar和cr都是由vehicle派生的,雖然基類vehicle的指標指向了ar或cr,但是呼叫的函式仍然是指向相同存在於基類中的多態函式,並非我們所指定的存在於派生類中的函式。

如果將基類與派生類中的兩個多型改以宣告成為虛函式,則c++的編譯程式會給予這兩個虛函式不同的指標,因此程式執行時會按照所給予的指標不同來訪問適當的函式。

一旦將函式宣告為虛函式,就必須在派生類中過載該虛函式。另外,派生類虛函式的引數和返回值還必須與基類中宣告的虛函式相同。

宣告方式如下:

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

範例程式如下:

純虛函式在宣告虛函式時,在表示式的尾端加入語句「=0」,而不加入任何定義該函式功能的語句,這種虛函式被稱為「純虛函式」。純虛函式最主要的功能是在起始宣告是並未加以定義該虛函式的本質而形成一種被保留的函式介面。

抽象基類

純虛函式無法在單一類或是派生類中宣告,只能存在於擁有繼承關係的基類中,這種基類稱為「抽象基類」。

當派生類繼承了抽象基類之後,必須在派生類中「重新定義」及「實現」所繼承的虛函式

#include

using

namespace std;

class

vehicle

;class

aircraft

:public vehicle

virtual

void

stop()

};class

car:

public vehicle

virtual

void

stop()

};intmain()

C 中虛函式與多型

物件導向理論中的3個術語 物件 方法和訊息。物件 object 不言而喻,它是構成系統的基本單位,有屬性和行為兩個要素,在c 中,每個物件都是由資料和函式這兩部分組成的,資料即是物件的屬性,行為稱之為方法 method 方法是對資料的操作,通常由函式實現。呼叫物件中的函式就是向該物件傳送乙個訊息 m...

c 虛函式與多型學習總結

多型性 乙個名字多種語義,或介面相同多種實現。過載函式是多型性的一種簡單形式 動態聯編 虛函式允許函式呼叫與函式體的聯絡 虛函式宣告格式 virtual 成員函式。虛函式必須是類的成員函式。建構函式不能是虛函式但析構函式可以是虛函式。乙個虛函式在派生類中相同的過載函式都保持虛函式的特性。不能將友元函...

C 虛函式與多型

1.1 虛函式概念 1.定義 在乙個類的成員函式前面加上virtual關鍵字,則該函式就稱為虛函式。2.如果乙個函式不是類的成員函式,則該函式不能定義為虛函式。即就是類外面不能使用virtual關鍵字 1.2 純虛函式與抽象類 1.純虛函式 在虛函式的後面加上 0 virtual void disp...