C 物件導向程式設計 多型性和虛函式

2021-07-28 12:27:34 字數 1515 閱讀 2945

多型:向不同的物件傳送同乙個訊息,不同的物件在接收時會產生不同的行為(即方法)。(訊息,就是指呼叫函式)

多型性分為兩類:靜態多型和動態多型。

靜態多型是通過函式的過載實現的,動態多型的特點是:不在編譯時確定執行那個程式,而是在程式執行的過程中才確定操作所針對的物件。(執行時多型,是通過虛函式實現的)

即如果通過物件名呼叫虛函式,屬於靜態關聯。如果通過基類指標呼叫虛函式,為動態關聯。

虛函式:

就是在基類宣告函式是虛擬的,並不是實際存在的函式,然後在派生類中才正式定義的函式。

虛函式的作用:

允許在派生類中重新定義與基類同名的函式,並且可以通過基類指標或引用來訪問基類和派生類中的同名函式。

虛函式的宣告方法:

virtual 函式型別 函式名();

虛函式的使用方法:

1、在類外定義虛函式時,不必再加virtual。

2、在派生類中重新定義此函式,函式名,函式型別,函式引數個數和型別必須與基類的虛函式相同。

3、當乙個成員函式被宣告為虛函式後,其派生類中的同名函式都自動成為虛函式。

4、定義乙個指向基類物件的指標變數,並使它指向同一類族中需要呼叫該函式的物件。

5、通過指標變數呼叫此虛函式,此時呼叫的就是指標變數指向的物件的同名函式。

靜態關聯(函式過載)、早期關聯/動態關聯/滯後關聯(程式執行階段的多型性)

虛函式使用注意:

1、只能使用virtual宣告類的成員函式,而不能將類外的普通函式宣告為虛函式。

2、乙個成員函式被宣告為虛函式後,在同一類族中的類就不能再定義乙個非virtual的但是與該虛函式具有相同的引數(包括個數和型別)和返回值型別的同名函式。

虛析構函式:

virtual ~classname( )

如果將基類的析構函式宣告為虛函式,由該基類所派生的析構函式也都自動成為虛函式(即使派生類的析構函式與基類的析構函式名字不相同)。最好把基類的析構函式宣告為虛函式。

純虛函式與抽象類:

virtual  函式型別 函式名( 引數列表 ) =0;

純虛函式沒有函式體。

如果乙個類中宣告了純虛函式,而在其派生類中沒有對該函式定義,則該虛函式在派生類中仍然為純虛函式。

抽象類:

1、唯一目的的就是用它去建立派生類,不能用來定義物件,只做為一種基本型別。

2、凡是包含純虛函式的類都是抽象類,因為純虛函式是不能被呼叫的,包含純虛函式的類是無法建立物件的。

3、雖然抽象類不能定義物件,但是可以定義指向抽象類資料的指標變數。

多型性與虛函式 物件導向程式設計

多型性 向不同的物件傳送同乙個訊息,不同的物件在接收時會產生不同 的行為。靜態多型性 由函式中在和運算子過載形成。動態多型性 通過虛函式實現。先建立乙個point類,包含資料成員x,y 座標點 以它為基類,派生出乙個circle 圓 類,增加資料成員r 半徑 再以circle類為直接基類,派生出乙個...

物件導向程式設計 多型性

include iostream using namespace std class b0 int main 輸出 b1 display d1 display 示例3 include using namespace std class b0 基類b0宣告 void main 主函式 輸出 b0 di...

C 多型性和虛函式

c 的多型性,我認為就是表達相同方法的函式在不同的類中的表現形式不同 舉個例子,比如 移動這一行為,人是用兩條腿在走路,烏龜是慢慢爬,蛇是爬行,老虎是四條腿在走,魚是在游動 這就是多型性 多型性使不同的物件但是又具有某種共同屬性的物件不但可以在一定程度上共享 還能共享介面。非靜態函式宣告的前面加上v...