虛函式與多型知識點一.
概念1.
多型性是指乙個名字,多種語義;或介面相同,多種實現。
過載函式是多型性的一種簡單形式。
2. 虛函式允許函式呼叫與函式體的聯絡在執行時才進行,稱為
動態聯編
。冠以關鍵字
virtual
的成員函式稱為虛函式
3. 實現執行時多型的關鍵首先是要說明虛函式,另外,必須用
基類指標
呼叫派生類的不同實現版本
(1)基類指標雖然獲取派生類物件位址,卻只能訪問派生類
從基類繼承的成員
#includeusing namespace std ;
class base
void who()
protected:
char x;
} ;class first_d : public base
void who()
protected:
char y;
} ;class second_d : public first_d
void who()
protected:
char z;
} ;int main()
--注
:---1.
乙個虛函式,在派生類層介面相同的過載函式都保持虛特性
---2.
虛函式必須是類的成員函式
---3.
不能將友元說明為虛函式,但虛函式可以是另乙個類的友元
---4.
析構函式可以是虛函式,但建構函式不能是虛函式
4.虛函式的過載特性
(1)在派生類中過載基類的虛函式要求函式名、返回型別、引數個數、引數型別和順序完全相同
(2)如果僅僅返回型別不同,
c++認為是錯誤過載
(3)如果函式原型不同,僅函式名相同,丟失虛特性
class base
;class derived : public base
;
二.
(一)
虛析構函式
(1)建構函式不能是虛函式
。建立乙個派生類物件時,必須從類層次的根開始,沿著繼承路徑逐個呼叫基類的建構函式
(2)析構函式可以是虛的
。虛析構函式用於指引
delete
運算子正確析構動態物件
---注:
1.派生類應該
從它的基類公有派生
2.必須首先在基類中定義虛函式
3.派生類對基類中宣告虛函式重新定義時,
關鍵字virtual
可以不寫
4.一般
通過基類指標訪問虛函式
時才能體現
多型性5.
乙個虛函式無論被繼承多少次,保持其虛函式特性
6.虛函式必須是其所在類的成員函式
,而不能是友元函式,也不能是靜態函式。
7.建構函式、內聯成員函式、靜態成員函式不能是虛函式
(虛函式不能以內聯的方式進行處理)
8.析構函式可以是虛函式,通常宣告為虛函式
(二)
成員函式呼叫虛函式(採用
動態聯編
)
#include class a
virtual void show_area() = 0 ;
};class ******** : public figure
{ public :
void show_area()
{ cout<<"******** with high "<
學習心得
多型這塊學得並不好,只了解到應用到登陸介面上的多型性,例如圖書管理系統中,學生和老師的登陸介面不一樣。
虛函式與多型
前三者為靜態繫結,虛函式為動態繫結 動態繫結 只有通過基類指標或引用呼叫虛函式才能引發動態繫結 虛函式不能被宣告為靜態 include using namespace std class base virtual void fun2 void fun3 class derived public ba...
虛函式與多型
多型性 呼叫同乙個函式名,可以根據需要實現不同的功能。虛函式 可以在程式執行時通過呼叫相同的函式名而實現不同功能的函式稱為虛函式。編譯時的多型性 函式過載 執行時的多型性 虛函式 執行時的多型性是指在程式執行之前,根據函式名和引數無法確定應該呼叫哪乙個函式,必須在程式的執行過程中,根據具體的執 況來...
虛函式與多型
多型性 c 支援兩種多型性 編譯時多型性,執行時多型性 虛函式 派生類可以不顯式地用virtual宣告虛函式,這時系統就會用以下規則來判斷派生類的乙個函式成員是不是虛函式 一般習慣於在派生類的函式中也使用virtual關鍵字,以增加程式的可讀性 該函式是否與基類的虛函式有相同的名稱 引數個數及對應引...