多态


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
关键字。此时,基类的函数被隐藏(易与重载混淆)。)

重载---则是允许有多个同名的函数,而这些函数的参数列表不同,允许参数个数不同,参数类型不同,或者两者都不同。编译器会根据这些函数的参数列表,来实现同名函数调用时的重载问题。


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