多型與虛函式
在c++中,多型有兩種,一種是函式過載,一種是虛函式。
多型性:指乙個名字,多種語義;或介面相同,多種實現。過載函式是多型性的一種簡單形式。虛函式允許函式呼叫與函式體的聯絡在執行時才進行,稱為動態聯編。
虛函式:
冠以關鍵字 virtual 的成員函式稱為虛函式。基類指標
實現執行時多型的關鍵首先是要說明虛函式,另外,必須用呼叫派生類的不同實現版本。
虛函式與基類指標
基類指標雖然獲取派生類物件位址,卻只能訪問派生類從基類繼承的成員
虛函式:
虛函式在不同的派生類中可能存在不同的實現,通過過載基類的虛函式,可以生成特定的派生類版本,如果派生類中無過載該虛函式,則使用基類版本,而且無論虛函式重定義是否使用virtual關鍵字,都還是虛函式。虛函式可以是友元函式但不能是靜態成員。
用虛函式實現動態連線在編譯期間,c++編譯器根據程式傳遞給函式的引數或者函式返回型別來決定程式使用那個函式,然後編譯器用正確的的函式替換每次啟動。這種基於編譯器的替換被稱為靜態鏈結,他們在程式執行之前執行。另一方面,當程式執行多型性時,替換是在程式執行期進行的,這種執行期間替換被稱為動態連線。[注意
]乙個虛函式,在派生類層介面相同的過載函式都保持虛特性。
虛函式必須是類的成員函式。
不能將友元說明為虛函式,但虛函式可以是另乙個類的友元。
析構函式可以是虛函式,但建構函式不能是虛函式。
虛函式的過載特性 :
1在派生類中過載基類的虛函式要求函式名、返回型別、引數個數、引數型別和順序完全相同
2.如果僅僅返回型別不同,c++認為是錯誤過載。如果函式原型不同,僅函式名相同,丟失虛特性
虛析構函式:
建構函式不能是虛函式。建立乙個派生類物件時,必須從類層次的根開始,沿著繼承路徑逐個呼叫基類的建構函式。
析構函式可以是虛的。虛析構函式用於指引 delete 運算子正確析構動態物件。[說明
](1)派生類應該從它的基類公有派生。
(2)必須首先在基類中定義虛函式。
(3)派生類對基類中宣告虛函式重新定義時,關鍵字virtual可以不寫。
(4)一般通過基類指標訪問虛函式時才能體現多型性。
(5)乙個虛函式無論被繼承多少次,保持其虛函式特性。
(6)虛函式必須是其所在類的成員函式,而不能是友元函式,也不能是靜態函式。
(7)建構函式、內聯成員函式、靜態成員函式不能是虛函式。
(虛函式不能以內聯的方式進行處理)
(8)析構函式可以是虛函式,通常宣告為虛函式。
純虛函式和抽象類
(1)概念:純虛函式是一種特殊的虛函式,
(2)功能:在許多情況下,在基類中不能對虛函式給出有意義的實現,而把它宣告為純虛函式,它的實現留給該基類的派生類去做。
(3)純虛函式是乙個在基類中說明的虛函式,在基類中沒有定義,要求任何派生類都定義自己的版本。
純虛函式為各派生類提供乙個公共介面
純虛函式說明形式:
virtual 型別 函式名(參數列)= 0 ;
乙個具有純虛函式的基類稱為抽象類
#include
usingnamespace std ;
classnumber
virtual void show() = 0 ;
protected: int val ;
};classhex_type : public number
void show()
};classdec_type : public number
void show()
};classoct_type : public number
void show() ;
voidfun( number & n ) // 抽象類的引用引數
intmain()
心得體會:
所謂虛函式是指派生類和基類擁有某乙個同樣的函式名但是其函式實現不同。在c++中,定義虛函式的方式是在類成員函式的宣告前加上關鍵字virtual。虛函式提供了一種物件導向的機制可以讓繼承類重寫其中方法,虛函式有方法體。以提供靈活的機制讓繼承類實現自己的函式方法。
虛函式與多型總結
多型性 polymorphism 是指乙個名字,多種語義 或介面相同,多種實現。過載函式是多型性的一種簡單形式。虛函式允許函式呼叫與函式體的聯絡在執行時才進行,稱為動態聯編。冠以關鍵字 virtual 的成員函式稱為虛函式實現執行時多型的關鍵首先是要說明虛函式,另外,必須用。基類指標呼叫派生類的不同...
虛函式與多型總結
虛函式與多型性 1.多型性是指乙個名字,多種語義 或介面相同,多種實現。2.過載函式是多型性的一種簡單形式。3.虛函式允許函式呼叫與函式體的聯絡在進行時才進行,成為多型聯編。5.實現執行時多型的關鍵首先是要說明虛函式,另外,必須用基類指標呼叫派生類的不同實現版本 基類指標雖然獲取派生類物件位址,卻只...
多型與虛函式總結
多型性 polymorphism 是指乙個名字,多種語義 或介面相同,多種實現。過載函式是多型性的一種簡單形式。虛函式允許函式呼叫與函式體的聯絡在執行時才進行,稱為動態聯編。冠以關鍵字 virtual 的成員函式稱為虛函式 實現執行時多型的關鍵首先是要說明虛函式,另外,必須用 基類指標呼叫派生類的不...