1.多型性:指乙個名字,多種語義;或介面相同,多種實現。
過載函式是多型性的一種簡單形式。
虛函式允許函式呼叫與函式體的聯絡在執行時才進行,稱為動態聯編。
2.虛函式:
冠以關鍵字
virtual
的成員函式稱為虛函式。
基類指標
實現執行時多型的關鍵首先是要說明虛函式,另外,必須用呼叫派生類的不同實現版本。
3.虛函式與基類指標
基類指標雖然獲取派生類物件位址,
卻只能訪問派生類從基類繼承的成員
例:
#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()
執行結果:
base class: a
base class: t
base class: e
first derived class: t.o
second derived class: e. n . d
[注意]
ø乙個虛函式,在派生類層介面相同的過載函式都保持虛特性
ø 虛函式必須是類的成員函式
ø不能將友元說明為虛函式,但虛函式可以是另乙個類的友元
ø析構函式可以是虛函式,但建構函式不能是虛函式
4.虛函式的過載特性
ø在派生類中過載基類的虛函式要求函式名、返回型別、引數個數、
引數型別和順序完全相同
ø如果僅僅返回型別不同,c++認為是錯誤過載
如果函式原型不同,僅函式名相同,丟失虛特性
例:
class base
;class derived : public base
;void g ( )
;
5.虛析構函式
建構函式不能是虛函式
。建立乙個派生類物件時,必須從類層次的根開始,沿著繼承路徑逐個呼叫基類的建構函式。
析構函式可以是虛的
。虛析構函式用於指引delete 運算子正確析構動態物件。
例:普通析構函式在刪除動態派生類物件的呼叫情況
#includeusing namespace std ;
class a
} ;class b : public a
} ;int main()
執行結果:
delete first object:
a::~a()is called.
deletesecond object:
b::~b()is called.
a::~a()is called.
[說明]
(1)派生類應該從它的基類
公有派生。(2
)必須首先在基類中定義虛函式
。(3)派生類對基類中宣告虛函式重新定義時,關鍵字virtual可以不寫。
(4)一般通過
基類指標訪問虛函式
時才能體現
多型性。
(5)乙個虛函式無論被繼承多少次,保持其虛函式特性。
(6)虛函式必須是其
所在類的成員函式
,而不能是友元函式,也不能是靜態函式。(7)
建構函式、內聯成員函式、靜態成員函式不能是虛函式
。(虛函式不能以內聯的方式進行處理)
(8)析構函式可以是虛函式,通常宣告為虛函式。
6.成員函式呼叫虛函式(採用動態聯編)
#include class a
virtual void show() = 0 ;
protected: int val ;
};class hex_type : public number
void show()
};class dec_type : public number
void show()
};class oct_type : public number
void show()
}; void fun( number & n ) // 抽象類的引用引數
int main()
c 虛函式與多型學習總結
多型性 乙個名字多種語義,或介面相同多種實現。過載函式是多型性的一種簡單形式 動態聯編 虛函式允許函式呼叫與函式體的聯絡 虛函式宣告格式 virtual 成員函式。虛函式必須是類的成員函式。建構函式不能是虛函式但析構函式可以是虛函式。乙個虛函式在派生類中相同的過載函式都保持虛函式的特性。不能將友元函...
繼承 虛函式與多型學習總結
基礎知識點 類之間的關係 繼承 在已有類的基礎上建立新類的過程乙個b 類繼承a 類,或稱從類 a 派生b類 a 稱為基類 父類 類 b 稱為派生類 子類 基類和派生類 類繼承關係的語法形式 class 派生類名 基類名錶 基類名錶 構成訪問控制 基類名1 訪問控制 基類名2,訪問控制 基類名n 訪問...
虛函式與多型總結
多型性 polymorphism 是指乙個名字,多種語義 或介面相同,多種實現。過載函式是多型性的一種簡單形式。虛函式允許函式呼叫與函式體的聯絡在執行時才進行,稱為動態聯編。冠以關鍵字 virtual 的成員函式稱為虛函式實現執行時多型的關鍵首先是要說明虛函式,另外,必須用。基類指標呼叫派生類的不同...