宣告三個定義:
1、過載
1、作用域相同(不能再兩個類中)
2、函式名相同
3、引數相同,而對返回值沒有要求
2、重定義(隱藏)
1、分別位於派生類與基類
2、函式名相同
3、引數可以不同,返回值可以不同
3、重寫(覆蓋)
1、分別位於派生類與基類
2、函式名相同
3、引數相同
4、返回值相同(即函式原型必須相同)
5、基類函式中有virtual關鍵字,不能有static
6、重寫函式的訪問修飾符可以不同
說明:重定義不管基類是否有virtual關鍵字。可以說重寫是重定義的一種。
一、函式過載的條件:
1、相同的作用域
2、函式名字相同
3、引數不同(包括引數個數、引數型別),但是對返回值沒有要求
二、泛型程式設計:
1、泛型程式設計是基於模板實現的。模板分為函式模板和類模板。
2、函式模板
函式模板的原型:
template
返回值 函式名(t a);
其中t表示一種型別,比如int、char、或者自定義型別。
呼叫方式:
函式名舉例說明:
//宣告函式模板
template< typename t>
t add(t a, t b)
return a + b;
//呼叫函式模板
int i = 1,j = 2;
cout<
說明:型別可以使用預設型別(比如上邊可以寫成cout<
三、動態多型:
這是乙個重點。動態多型實現的核心就是子類重寫父類的虛函式(純虛函式也是虛函式的一種)。這裡分為兩步講解:1動態多型的實現(環境搭建)。2動態多型的使用(其實不能這麼叫但是為了方便這裡就這麼叫了)。
1、實現
**說明
//基類 base
class base{
public:
void fun1()
cout<
void fun2()/* = 0;*/
cout<
virtual void fun3()
cout<
virtual void fun4()
cout<
//派生類derive
class derive: public base
public:
void fun1(int i)
cout<
void fun3()
cout<
void fun5()
cout<
這樣動態多型的環境就搭建好了。
2、使用
使用的實質是使用父類的指標指向子類的物件,然後通過指標呼叫方法。這裡分為5種情況:1、父類中的方法不是虛函式,而且子類中重定義了這個方法(如上邊的fun1)。2、父類中的方法不是虛函式,而且子類中沒有重定義這個方法(如上邊的fun2)。3、父類中的方法是虛函式,子類重寫了這個方法(如上邊的fun3)。4、父類中的方法是虛函式,而子類沒有重寫這個方法(如上邊的fun4)。5、父類中沒有改方法,而子類中有(如上邊的fun5);
2.1、父類中的方法不是虛函式,而且子類中重定義了這個方法(如上邊的fun1)
derive d;
base b;
base *p = &d;
b.fun1();//呼叫的是base中的方法
d.fun1();//呼叫的是derive中的方法
p->fun1();//呼叫的是base中的方法
2.2、父類中的方法不是虛函式,而且子類中沒有重定義這個方法(如上邊的fun2)
b.fun2();//呼叫的是base中的方法
d.fun2();//呼叫的是base中的方法
p->fun2();//呼叫的是base中的方法
2.3、父類中的方法是虛函式,子類重寫了這個方法(如上邊的fun3)
動態多型主要使用的是這種方式。
b.fun3();//呼叫的是base中的方法
d.fun3();//呼叫的是derive中的方法
p->fun3();//呼叫的是derive中的方法
2.4、父類中的方法是虛函式,而子類沒有重寫這個方法(如上邊的fun4)
b.fun4();//呼叫的是base中的方法
d.fun4();//呼叫的是base中的方法
p->fun4();//呼叫的是base中的方法
2.5、父類中沒有改方法,而子類中有(如上邊的fun5);
b.fun5();//語法錯誤
d.fun5();//呼叫的是derive中的方法
p->fun5();//語法錯誤
總結父類的指標指向派生類後通過父類的指標呼叫的方法。分一下幾種情況
1、如果父類中的函式不是虛函式則呼叫的是父類中的函式
2、如果父類總的函式是虛函式則呼叫的是子類中的函式(如果子類沒有重寫這個函式則呼叫的仍然是父類的函式)
3、如果父類沒有改函式而子類中有則父類的指標不能呼叫該函式。
python 多型說明
class object 應用程式類 def init self,name,version,desc self.name name self.version version self.desc desc def str self return s 當前版本是 s s self.name,self.v...
多型的幾點說明
父類的引用指向子類的例項 多型實現的3個必要條件 1.繼承關係 2.子類重寫了父親方法 3.父類的引用指向子類的例項 1.良好的擴充套件性 2.方便我們的 維護 3.靈活性更好 1.父類型別作為方法的形參 2.父類型別作為方法的返回值型別 3.父類的引用指向子類的例項 1.需要根據你們的業務需求來決...
c 虛函式,多型的使用說明
利用虛函式就很好地解決了這個問題。可以看到 當把基類的某個成員函式宣告為虛函式後,允許在其派生類中對該函式重新定義,賦予它新的功能,並且可以通過指向基類的指標指向同一類族中不同類的物件,從而呼叫其中的同名函式。由虛函式實現的動態多型性就是 同一類族中不同類的物件,對同一函式呼叫作出不同的響應。虛函式...