> 文档中心 > 13天带你了解C++ ---DAY2 函数重载&&引用

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  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     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   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  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   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   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     using namespace std;   int main(){int a=1;const int &ra=a;//ra=2; //编译不通过a=3; cout<<a<<endl;     return 0; }     

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

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

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

字库吧