C 語言筆記系列之十八 虛函式(1)

2021-06-22 15:33:28 字數 1380 閱讀 3746

1.c++中的多型

(1)多型性:同乙個函式的呼叫可以進行不同的操作,函式過載是實現多型的一種手段。

(2)聯編:在編譯階段進行聯接,即是在編譯階段將乙個函式的呼叫點和函式的定義點聯接起來。

a.靜態聯編:在編譯階段就完成的函式聯編——函式過載。

b.動態聯編:在程式的執行階段由系統自動選擇具體的函式——虛函式。

注:c++的多型主要指的就是動態聯編。

2.虛函式

(1)虛函式是在函式的定義時將其宣告為虛函式即可。

(2)說明:virtual 資料型別 函式名(參數列)

a.目的:當通過基類指標呼叫虛函式時,系統進行動態聯編。

b.在派生類中定義了和基類名稱相同、引數個數相同、引數型別相同、返回值型別相同的函式時,若基類中的同名成員函式是虛函式,派生類的同名成員函式將自動被虛化。

c.通過物件訪問虛函式時採用靜態聯編。動態聯編只能夠通過指向物件的指標和物件的引用來完成。

3.例子

example 1

#include

class point(

float area() //等價於:float area()=0;

};const float pi=3.1416;

class circle:pulic point

float area()

};int main()

};class rectangle:public point

double area()

};class circle:public point

double area()

};class ********:public point

double area()

};int main()

程式輸出:

fun1()...fun2()

fun2()...fun3()

fun3()...fun4()

fun4()...fun5()

the end.

fun1()...fun2()

fun2()...fun3()

fun3...fun4

fun4...fun5

all done.

7.若基類和派生類中的同名函式引數個數不同,引數型別不同,基類中的成員函式儘管是虛函式,但將丟失虛特性——採用靜態聯編。

基類和派生類中的同名成員函式,若出現基類中的同名成員函式非虛,派生類中同名成員函式是虛函式,那麼也將採用靜態聯編。

example 4

#include

class base

程式輸出:

device fun1.

device fun2.

base fun3.

base fun4.

C 程式設計入門系列之四十八(多型性 虛函式)

前一講的是運算子過載為類的友員函式。今天講的是屬於包含多型的虛函式。一.虛函式的意義 在講賦值相容規則時給出了乙個程式例子,其中包含類base child0和child1。在程式執行結果中我們看到,main函式中base型別的指標pbase,分別指向base child0和child1類的物件時呼叫...

C 語言筆記系列之八 建構函式

1.建構函式 作用 建立物件的時候,由系統自動完成物件的初始化工作,每建立乙個物件時,系統將自動呼叫該物件的建構函式。乙個物件若未設定建構函式,則系統會自動新增乙個無參無操作的建構函式,每個物件完成建立時必須呼叫建構函式。2.建構函式的表示 1 建構函式的函式名與其類名同名。2 建構函式是類的成員函...

C 學習筆記之虛函式

虛函式即在父類中成員函式錢加上virtual關鍵字,使得該成員函式具有動態鏈結屬性 因此函式具有了多型性 那麼什麼是動態鏈結呢?即程式在編譯階段不能確切知道將要呼叫的函式,只有在程式執行時才能確定將要呼叫的函式,要確切的知道呼叫的函式,要求聯編工作要在程式執行時進行,這種程式執行時進行的聯編稱之為動...