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

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

目录

一.函数重载

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                                                                                                                                                  
   using namespace std;
   
   void add(int a,int b){
     int c=a+b;
     cout<

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


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

      答案是不可以,上栗子

 #include
     using namespace std;
     int add(int a,int b){
     int c=a+b;
     cout<

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


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
   using namespace std;
    
   int main(){
     int a=0;
     int& ra=a;       //ra就是a的引用
     cout<<"a的值:"<

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


2.3为什么会有引用呢?

        众所周知,C语言是没有引用的,C语言想要 *** 作变量一般都是使用指针的,指针的使用确实很方便,但是指针的缺点也是非常明显的,一不小心就会导致程序奔溃。


相信大家当初都有被指针支配的恐惧吧,越界访问,访问空指针等等。


引用的出现在极大程度上弱化了指针,我们从下边例子来看。


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


 传值

#include
  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<

       结果:传值未完成交换

传地址

#include
   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<

 结果:完成交换

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

2.3.2现在我们来看看传递引用
#include
   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<

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


2.4常引用 2.4.1常引用的使用

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

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

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

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/563853.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-03
下一篇 2022-04-03

发表评论

登录后才能评论

评论列表(0条)