多型總結
阿新 • • 發佈:2018-11-14
1.定義
Ø
多型性(
Polymorphism)是指一個名字,多種語義;或介面相同,多種實現。
Ø
過載函式是多型性的一種簡單形式。
Ø
虛擬函式允許函式呼叫與函式體的聯絡在執行時才進行,稱為動態聯編。
2.虛擬函式
Ø 冠以關鍵字 virtual
的成員函式稱為虛擬函式
Ø
實現執行時多型的關鍵首先是要說明虛擬函式,另外,必須用
基類指標呼叫派生類的不同實現版本
3.
虛擬函式和基類指標
基類指標雖然獲取派生類物件地址,卻只能訪問派生類從基類繼承的成員
iostream>
void who() { cout << "First derived class:"<< x << ", " << y << "\n" ; }
5.虛擬函式的過載特性 Ø在派生類中過載基類的虛擬函式要求函式名、返回型別、引數個數、
#include<
using namespace std ;
class Base
{ public : Base(char xx) { x = xx; }
void who() { cout << "Base class: "<< x << "\n" ; }
protected: char x;
} ;
class First_d : public Base
{ public : First_d(char xx, char yy):Base(xx) { y = yy; }
protected: char y;
} ;
4.注意:
Ø 一個虛擬函式,在派生類層介面相同的過載函式都保持虛特性 Ø 虛擬函式必須是類的成員函式 Ø 不能將友元說明為虛擬函式,但虛擬函式可以是另一個類的友元 Ø 解構函式可以是虛擬函式,但建構函式不能是虛擬函式5.虛擬函式的過載特性 Ø在派生類中過載基類的虛擬函式要求函式名、返回型別、引數個數、
引數型別和順序完全相同
Ø 如果僅僅返回型別不同,C++認為是錯誤過載 Ø 如果函式原型不同,僅函式名相同,丟失虛特性 6.純虛擬函式和抽象類 n 純虛擬函式是一種特殊的虛擬函式, n 在許多情況下,在基類中不能對虛擬函式給出有意義的實現,而把它宣告為純虛擬函式,它的實現留給該基類的派生類去做。 n 這就是純虛擬函式的作用。 Ø 純虛擬函式是一個在基類中說明的虛擬函式,在基類中沒有定義, 要求任何派生類都定義自己的版本 Ø 純虛擬函式為各派生類提供一個公共介面 Ø 純虛擬函式說明形式:virtual 型別 函式名(引數表)= 0;
Ø一個具有純虛擬函式的基類稱為抽象類。 7.#include<iostream>
using namespace std;
#include"figure.h"
int main()
{ triangle 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() ;
}