為了理解多型性,做了乙個小實驗,用事實說話~
**如下:
#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 學習之多型性
類的幾個重要特性之一多型性,有著廣泛的用途。類的多型性包括 編譯時多型和執行時多型。編譯時多型表現為乙個同名的方法會根據引數型別 個數和位置的不同有不同執行效果。通過方法過載來實現。顧名思義,它由編譯器根據呼叫引數的不同,選擇相應的函式。執行時多型通過虛方法實現。表現為 相同的引數,仍會執行不同的函...