(总结)C++中函数重载,覆盖(重写)和隐藏详解(待补充)

                              C++中函数重载,覆盖(重写)和隐藏详解

一:函数重载基本知识:

   1.函数重载的定义:
            在相同的作用域内的同名函数.
                不同作用域内的同名函数通过作用域来区分不形成重载.
  
   2.函数重载的处理方式:编译器是以静态绑定的方式处理的.
   
   3.函数重载的分类;
            类的成员函数的重载和全局函数的重载.

   4.在同一个类中的成员函数的重载的特点:
     1).作用域相同.(不同作用域不构成重载).
     2).函数名相同.
     3).参数不相同(个数,顺序或者类型不一致).
     4).关键字virtual可有可无.


   注意:
     1).不能仅以函数返回值类型的不同作为函数重载的依据.
        如  int  Max(int a,int b) {}
              void  Max(int a,int b) {}
     2).同种类型的参数,其参数名称和使用形式的不同的不能成为重载的依据.
         如  int Func(int a) {}
               intFunc(int &a) {}
               intFunc(const int &a) {} 
     3).参数的顺序不同也可以形成重载().
         如  voidFunc(int a,char c) {}
              void Func(char c,int a) {}
     4).注意防止参数类型间隐式地转化而导致函数不能重载.
        如   void Func(int x,int b) {}
              void Func(int a,float b) {}  
        在调用Func(1,0.5)的时候系统就会出现二义性,因为0.5这种常量在系统中默认是double型的,
然后无法确定转换为int型还是float型.

    5.全局函数重载:
       在整个作用域范围内的函数重载.


二:函数默认参数和重载二义性:

函数默认参数:

    1.函数默认参数的概念:
           就是函数声明时给出了具体的默认值参数.
   2.函数默认参数存在的必要性:
          带来了函数调用上的灵活性,减少了程序设计时重复输入相同参数的繁琐工作.尤其是用于构造函数.

   3.函数默认参数的语法格式:
          如   void Func(int a,int b = 2, int c = 3) { }
    
       注意:
       1.默认参数的声明是从右到左依次默认的,也就是说b有默认值的话,c一定也要有的.
       2.对于成员函数的默认参数,只能在声明成员函数时给出,不能在类外实现时给出,否则编译出错.

     4.函数默认参数的使用方式:
        Func(1);    //a=1,默认b=2,c=3
       Func(1,2);    //a=1,b=2,默认c=3
       Func(1,2,3);    //a=1,b=2,c=3

重载二义性:

     重载函数的二义性问题:
            编译器不能确定该调用哪个函数,可以做出多个解释.
    
     重载二义性示例:
        void Func() {}
        void Func(int a = 1) {}
        void Func(int a = 1,int b = 2) {}
        void Func(int a = 1,int b = 2, int c = 3) {} 
  
       调用时:
       //Func();
        //Func(1);
        //Func(1,2);    //有歧义
        Func(1,2,3);

      如果重载函数中含有隐式类型转换,即使没有默认参数,也可能出现二义性问题,比如:
         void  Func(int  iNum) {}
         void Func(float  fNum = 0.1) {}
      在调用Func(0.5)的时候系统就会出现二义性,因为0.5这种常量在系统中默认是double型的,然后无法确定转换为int型还是float型.
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值