c 多型說明

2021-10-01 04:53:37 字數 2583 閱讀 8385

宣告三個定義:

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 虛函式,多型的使用說明

利用虛函式就很好地解決了這個問題。可以看到 當把基類的某個成員函式宣告為虛函式後,允許在其派生類中對該函式重新定義,賦予它新的功能,並且可以通過指向基類的指標指向同一類族中不同類的物件,從而呼叫其中的同名函式。由虛函式實現的動態多型性就是 同一類族中不同類的物件,對同一函式呼叫作出不同的響應。虛函式...