C 小實驗之多型性理解

2021-06-23 01:03:49 字數 2074 閱讀 8651

為了理解多型性,做了乙個小實驗,用事實說話~

**如下:

#include #include using namespace std;

class cup

;class teacup

};class fathor

virtual void vf2(float x)

virtual void vf3(float x)

void f1()

void f2(float x)

void f3(float x)

void f4(float x) };

class son : public fathor

virtual void vf2(float x)

virtual void vf3(int x)

void f1()

void f2(float x)

執行結果:

結果分析:

1.基類指標,指向基類物件,呼叫基類本身的函式

fp->vf1();// for a try 

2. no parameter

fp->vf1(); // outpurt son: vf1 

分析: 基類指標,指向子類物件,體現多型性。指向vf1(虛函式),通過虛函式列表找到函式位址,物件不同時,虛函式位址不同。

因此此時找到了子類物件的虛函式位址。

sp->vf1();//output son: vf1 

分析:子類指標,指向子類物件,呼叫子類本身的函式。

fp->f1();//output fathor:f1 

分析:基類指標,指向子類物件,體現多型性。指向f1(固定偏移量的函式),偏移量由指標型別決定,因而此時指向基類的f1()。

sp->f1();//output son :f1

分析:子類指標,指向子類物件,呼叫子類本身的函式。

3. the same parameter 

fp->vf2(2014.0801); // output: son : vf2:2014.08 

分析:此時指向子類物件的虛函式vf2

sp->vf2(2014.0801); // output: son : vf2 2014.08

分析:呼叫子類本身的函式

fp->f2(2014.0801);  //output fathor : f2 :2014.08

分析:不是虛函式的成員函式,在引數指向基類的f2()

sp->f2(2014.0801); //output son : f2 : 2014.08 

分析:指向子類的f2()

4.the different types of parameter

fp->vf3(2014.0801); // output: fathor vf3 :2014.08,

分析:函式同名,但是引數型別不同時,不管有無vitrual,都是根據指標型別進行判斷的

sp->vf3(2014.0801); // output:son vf3 :2014  

分析:sp為子類指標,即呼叫子類物件的函式

fp->f3(2014.0801); //oyutput:faothor f3  :2014.08 

分析:fp為父類指標,即呼叫父類對像的函式

sp->f3(2014.0801); //output:son f3 :2014 

分析:根據隱藏規則,派生類的函式與基類函式同名,但是引數不同時,不管有沒有virtual,都將基類的函式隱藏,不是過載。

5.the fathor class has no virtual

fp->f4(2014.0801); //output:fathor f4:2014.08 

分析:函式同名,但是基類沒有virtual ,還是根據指標型別進行判斷

sp->f4(2014.0801);//output: son f4:2014.08 

分析:根據隱藏規則,派生累的函式與積累函式同名,引數也相同,但是基類沒有virtual時,也將基類函式隱藏,不是覆蓋。

c 之 多型性

先看乙個例子 然後我們引進多型,看看 公升級的威力 1 include2 using namespace std 34 class liberation 10virtual intcombat 1114 private 15 intcapability 16 17class liberation a...

Java學習筆記8 多型性理解

多型 是把子類物件主 作父型別的物件編譯時型別指的是被看作的型別。執行時型別指的是實際的物件例項的型別,客觀不可改變。類的具體化就是物件,即物件是類的例項化。三個必要條件 繼承 重寫 父類引用指向子類物件 實現方式 重寫 介面 抽象類抽象方法。多型特性 物件例項確定則不可改變 只能呼叫編譯時所定義的...

C 學習之多型性

類的幾個重要特性之一多型性,有著廣泛的用途。類的多型性包括 編譯時多型和執行時多型。編譯時多型表現為乙個同名的方法會根據引數型別 個數和位置的不同有不同執行效果。通過方法過載來實現。顧名思義,它由編譯器根據呼叫引數的不同,選擇相應的函式。執行時多型通過虛方法實現。表現為 相同的引數,仍會執行不同的函...