13天带你了解C++ ---DAY2 函数重载&&引用

目录

一.函数重载

1.1什么是函数重载?

1.2重载函数如何使用呢?

1.2那么,若返回值不同,其他都相同,可以重载吗?

1.3为什么要引入重载呢?

1.4既然函数重载这么好用,为什么C语言不能使用呢?

二、c++中的引用

2.1什么是引用?

2.2引用如何使用呢?

2.3为什么会有引用呢?

2.3.1首先我们来了解一下参数传值和传地址。

2.3.2现在我们来看看传递引用

2.4常引用

2.4.1常引用的使用


一.函数重载

1.1什么是函数重载?

        若多个函数具有相同的函数名,相同的作用域,不同的返回值,则这些函数就是进行了函数重载,此处的参数列表不同包括参数列表个数不同,次序不同,类型不同

1.2重载函数如何使用呢?

#include<iostream>                                                                                                                                                  
   using namespace std;
   
   void add(int a,int b){
     int c=a+b;
     cout<<c<<endl;
   }
   
   void add(double a,double b){
    double c=a+b;
    cout<<c<<endl;
  }
  
  void add(int a,int b,int c){
    int d=a+b+c;
    cout<<d<<endl;
  }
  int main(){
   
    add(1,2);
    add(1.1,2.1);
    add(1,2,3);
  
    return 0;
  }

上边三个函数未重载函数,可以看到它们都是函数名相同,作用域相同,参数列表不同。

1.2那么,若返回值不同,其他都相同,可以重载吗?

      答案是不可以,上栗子

 #include<iostream>
     using namespace std;
     int add(int a,int b){
     int c=a+b;
     cout<<c<endl;
     return c;
     }
     
   void add(int a,int b){                                                                                                                                            
      int c=a+b;
      cout<<c<<endl;
    }
    
    int main(){ 
      add(1,2);
      add(1,2);
      return 0;
    }   

 此处编译器告诉我们只有返回值类型不同,不可以重载。

1.3为什么要引入重载呢?

        C语言中是没有重载这个概念的,这个概念是随着面向对象一起引入C++的。面向对象的特性就是封装,多态和继承,函数重载很好的契合了多态的概念。在我们使用C语言编程时,如果我们想定义一个完美的add函数,我们只能改变函数名,比如int_add,double_add,定义太多之后我们自己往往也记不住,所以这就造成了很大的不方便。现在我们了解到函数重载后,这个问题就迎刃而解啦。

1.4既然函数重载这么好用,为什么C语言不能使用呢?

        这个问题就要回到编译器上了,C语言在编译阶段会将我们的函数名重命名,具体操作就是在我们函数名之前加上“_”,调用时直接调用。这也就导致如果函数名相同,编译器就不能判断调用哪个函数,所以才会报错。 c++就在这个基础上进行了优化,在重命名这个阶段进行了优化,增加了参数列表的标识符,所以才可以函数重载。

         其实c++也可以按照C语言的方式编译文件的,这时我们在函数之前加上entern "C"就可。

二、c++中的引用

2.1什么是引用?

        引用是一种特殊类型的变量,也可以认为是另一个变量的别名,通过引用名访问和提高变量名访问效果是一样的。

2.2引用如何使用呢?

引用使用模板:类型&  变量名,比如int& ra=a;  

#include<iostream>
   using namespace std;
    
   int main(){
     int a=0;
     int& ra=a;       //ra就是a的引用
     cout<<"a的值:"<<a<<endl;
     cout<<"ra的值"<<ra<<endl;                                                                                                                                         
    cout<<"a的地址:"<<&a<<endl;
    cout<<"ra的地址:"<<&ra<<endl;
    return 0;
  }

         上边程序演示了引用的使用方法,同时也验证了引用并不是变量内容的拷贝复制,而是变量的别名,因为它们的地址都是一样的。

2.3为什么会有引用呢?

        众所周知,C语言是没有引用的,C语言想要操作变量一般都是使用指针的,指针的使用确实很方便,但是指针的缺点也是非常明显的,一不小心就会导致程序奔溃。相信大家当初都有被指针支配的恐惧吧,越界访问,访问空指针等等。引用的出现在极大程度上弱化了指针,我们从下边例子来看。

2.3.1首先我们来了解一下参数传值和传地址。

 传值

#include<iostream>
  using namespace std;
  
  void swap(int a,int b){
    int c;
    c=a;
    a=b;
    b=c;
   }

  int main(){
    int a=1,b=2;
    swap(a,b);                                                                                                                                                 
    cout<<a<<endl;
    cout<<b<<endl;
    return 0;
  }

       结果:传值未完成交换

传地址

#include<iostream>
   using namespace std;
   
   void swapp(int* a,int* b){
     int c;
     c=*a;
     *a=*b;
     *b=c;
   }
  
  int main(){
    int a=1,b=2;
    swapp(&a,&b);
     cout<<a<<endl;                                                                                                                                                   
     cout<<b<<endl;
    return 0;
  }

 结果:完成交换

 结论: 我们发现在C语言中我们想完成修改变量操作必须借助指针或者返回值赋值,直接传值是不能修改的

2.3.2现在我们来看看传递引用

#include<iostream>
   using namespace std;
   
   void swapp(int& a,int& b){
     int c;
     c=a;
     a=b;
     b=c;
   }
  
  int main(){
    int a=1,b=2;
    int& aa=a;
    int& bb=b;                                                                                                                                                        
    swapp(aa,bb);
     cout<<a<<endl;
     cout<<b<<endl;
    return 0;
  }

        现在我们知道了一种不用直接指针就可以操作变量的方法,那就是传递引用,这样就弱化了指针的使用,能降低出错的概率。

2.4常引用

2.4.1常引用的使用

常引用声明方式:const 类型& 引用名 =变量名;

 #include<iostream>
     using namespace std;
     
     int main(){
       int a=1;
       const int &ra=a;
       //ra=2;        //编译不通过
       a=3;                                                                                                                                                            
      cout<<a<<endl;                                                                                                                             
      return 0;                                                                                                                                  
    }            

结果:能正常打印3,但是不能打印出2

结论:用const声明的引用,不能通过引用对变量进行修改,可以通过变量本身修改,这极大提升了引用的安全性

好啦,今天的内容到此为止啦,大家明天见哦!

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗二叉树_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值