虛函式與多型性:
多型性(polymorphism)是指乙個名字,多種語義;或介面相同,多種實現。
過載函式是多型性的一種簡單形式。
虛函式允許函式呼叫與函式體的聯絡在執行時才進行,稱為動態聯編。
虛函式和動態聯編:
冠以關鍵字 virtual 的成員函式稱為虛函式
實現執行時多型的關鍵首先是要說明虛函式,另外,必須用
基類指標呼叫派生類的不同實現版本
基類指標雖然獲取派生類物件位址,卻只能訪問派生類從基類繼承的成員
#include
using namespace std ;
class base
void who()
protected: char x;
} ;class first_d : public base
void who()
protected: char y;
虛函式和基類指標:
乙個虛函式,在派生類層介面相同的過載函式都保持虛特性
虛函式必須是類的成員函式
不能將友元說明為虛函式,但虛函式可以是另乙個類的友元
析構函式可以是虛函式,但建構函式不能是虛函式
虛函式的過載特性:
在派生類中過載基類的虛函式要求函式名、返回型別、引數個數、
引數型別和順序完全相同
如果僅僅返回型別不同,c++認為是錯誤過載
如果函式原型不同,僅函式名相同,丟失虛特性
虛析構函式
建構函式不能是虛函式。建立乙個派生類物件時,必須從類層次的根開始,沿著繼承路徑逐個呼叫基類的建構函式
析構函式可以是虛的。虛析構函式用於指引 delete 運算子正確析構動態物件
說明:
1.派生類應該從它的基類公有派生。?
2.必須首先在基類中定義虛函式。
3.派生類對基類中宣告虛函式重新定義時,關鍵字virtual可以不寫。
4.一般通過基類指標訪問虛函式時才能體現多型性。
5.乙個虛函式無論被繼承多少次,保持其虛函式特性。
6.虛函式必須是其所在類的成員函式,而不能是友元函式,也不能是靜態函式。
7.建構函式、內聯成員函式、靜態成員函式不能是虛函式。
(虛函式不能以內聯的方式進行處理)
8.析構函式可以是虛函式,通常宣告為虛函式。
純虛函式和抽象類:
純虛函式是一種特殊的虛函式,
在許多情況下,在基類中不能對虛函式給出有意義的實現,而把它宣告為純虛函式,它的實現留給該基類的派生類去做。
這就是純虛函式的作用。
純虛函式是乙個在基類中說明的虛函式,在基類中沒有定義, 要求任何派生類都定義自己的版本
純虛函式為各派生類提供乙個公共介面
純虛函式說明形式:
virtual 型別 函式名(參數列)= 0 ;
乙個具有純虛函式的基類稱為抽象類。
例如class point ;
class shape ; // 抽象類
void move ( point p )
virtual void rotate ( int ) = 0 ; // 純虛函式
virtual void draw ( ) = 0 ; // 純虛函式
} ;…...
shape x ; // error,抽象類不能建立物件
shape *p ; // ok,可以宣告抽象類的指標
shape f ( ) ; // error, 抽象類不能作為函式返回型別
void g ( shape ) ; // error, 抽象類不能作為傳值引數型別
shape & h ( shape &) ; // ok,可以宣告抽象類的引用
簡單圖形類的舉例:
class figure
virtual void show_area() = 0 ;
};class ******** : public figure
{ public :
void show_area()
{ cout<<"******** with high "<#include
using namespace std ;
#include"figure.h"
int main()
{ ******** t ; //派生類物件
square s ; circle c;
t.set_dim(10.0,5.0) ;
t.show_area();
s.set_dim(10.0,5.0) ;
s.show_area() ;
c.set_dim(9.0) ;
c.show_area() ;
執行後:
******** with high and base 5 has an area of 25
square with dimenion 10*5 has an area of 50
circle with radiue 9 has an area of 254.34
請按任意鍵繼續
第九章 函式與模組
大家都知道c語言是一種面向過程的語言,它的特點就是對步驟和過程的細節操作。當面臨編寫大型的程式時,量是會很多的。都是細節的話,很不容易抓住重點的,程式可讀性和維護性都很低。為了克服這個缺點,有了模組化的程式設計思想。把能夠實現特定功能的 塊包裝起來,放到函式裡面 需要使用的時候,直接整體呼叫。這樣每...
第九章 Mysql函式
簡介 數學函式 處理數字 字串函式 處理字串 日期和時間函式 處理日期和時間,獲取時間 條件判斷函式 控制條件選擇 系統資訊函式 獲取mysql系統資訊,包括資料庫名稱,當前使用者名稱和資料庫版本 加密函式 對字串加密和解密 其他函式 格式化函式和鎖函式 函式 作用 函式 作用 abs x 絕對值l...
第九章(筆記)
轉移指令是可以修改ip,或同時修改cs和ip的指令 offset 是用於提取標號偏移位址的操作符 jmp在第2章裡說到時用於修改ip或同時修改cs和ip的轉移指令,這章裡單獨的jmp指令是乙個無條件的轉移指令 jmp short 標號 是實現段內短轉移 jmp near ptr 標號 是實現段內近轉...