多態


class CClassBase
{
public:
       virtual bool  vFunTest();
       bool funTest();
};
 
class CClassExtern : public CClassBase      
{
public:
       virtual bool  vFunTest (); 
       bool funTest();    
};

多態的主要思想:基類指針可以指向派生的對象。

CClassExtern *pE = new CClassExtern();
CClassBase* p = pE;
 
pE-> vFunTest ();  //調用派生類方法 
p-> vFunTest ();    //調用派生類方法
 
pE->funTest();              //調用派生類方法
p->funTest();         //調用基類方法
 
fun(CClassBase* pTemp)
{
pTemp-> vFunTest (); //傳入派生類對象時,調用派生類方法;傳入基類對象,調用基類方法
pTemp->funTest();//調用基類方法
}

 

多態---最常見的用法就是聲明基類的指針,利用該指針指向任意一個子類對象,調用相應的虛函數,可以根據指向的子類的不同而實現不同的方法。如果沒有使用虛函數的話,即沒有利用C++多態性,則利用基類指針調用相應的函數的時候,將總被限制在基類函數本身,而無法調用到子類中被重寫過的函數

虛函數是在基類中被聲明爲virtual,並在派生類中重新定義的成員函數,可實現成員函數的動態覆蓋(Override

隱藏---是指派生類的函數屏蔽了與其同名的基類函數

(規則如下:

1)如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual
關鍵字,基類的函數將被隱藏(易與重載混淆)。
(2)如果派生類的函數與基類的函數同名,並且參數也相同,但是基類函數沒有virtual
關鍵字。此時,基類的函數被隱藏(易與重載混淆)。)

重載---則是允許有多個同名的函數,而這些函數的參數列表不同,允許參數個數不同,參數類型不同,或者兩者都不同。編譯器會根據這些函數的參數列表,來實現同名函數調用時的重載問題。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章