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