函数重载 覆盖 隐藏

系统 1446 0

重载overload

函数名相同,但形参的个数或形参的类型不同。

仅返回值不同,不能定义为重载函数。

      class Base {

public:

	
      
        void
      
       baseFun(
      
        int
      
      ) { cout << "
      
        baseFun(int) in Base
      
      " << endl; }

	
      
        void
      
       baseFun(
      
        double
      
      ) { cout << "
      
        baseFun(float) in Base
      
      " << endl; }

};


    

 

覆盖Override

派生类对基类virtual函数的重写(原型一样)。

      class Base {

public:

	virtual 
      
        void
      
       baseVirtualFun(
      
        int
      
      ) { cout << "
      
        baseVirtualFun(float) in Base
      
      " << endl; }

};



class Derived: public Base {

public:

	virtual 
      
        void
      
       baseVirtualFun(
      
        int
      
      ) { cout << "
      
        baseFun(float) in Derived
      
      " << endl; }

};


    

 

隐藏(另一个新的函数)

两种情况:

1) 如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

2) 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。

      class Base {

public:

	virtual 
      
        void
      
       baseVirtualFun(
      
        int
      
      ) { cout << "
      
        baseVirtualFun(float) in Base
      
      " << endl; }

};



class Derived: public Base

{

public:

	virtual 
      
        void
      
       baseVirtualFun(
      
        float
      
      ) { cout << "
      
        baseFun(float) in Derived
      
      " << endl; }

};


    

 

 

总结:重载是同一作用域,覆盖是派生类对基类virtual方法的重写,隐藏是两个类之间(可用using 引用)。

函数重载 覆盖 隐藏


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论