目录
一.函数重载
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<
上边三个函数未重载函数,可以看到它们都是函数名相同,作用域相同,参数列表不同。
答案是不可以,上栗子
#include
using namespace std;
int add(int a,int b){
int c=a+b;
cout<
此处编译器告诉我们只有返回值类型不同,不可以重载。
C语言中是没有重载这个概念的,这个概念是随着面向对象一起引入C++的。
面向对象的特性就是封装,多态和继承,函数重载很好的契合了多态的概念。
在我们使用C语言编程时,如果我们想定义一个完美的add函数,我们只能改变函数名,比如int_add,double_add,定义太多之后我们自己往往也记不住,所以这就造成了很大的不方便。
现在我们了解到函数重载后,这个问题就迎刃而解啦。
这个问题就要回到编译器上了,C语言在编译阶段会将我们的函数名重命名,具体 *** 作就是在我们函数名之前加上“_”,调用时直接调用。
这也就导致如果函数名相同,编译器就不能判断调用哪个函数,所以才会报错。
c++就在这个基础上进行了优化,在重命名这个阶段进行了优化,增加了参数列表的标识符,所以才可以函数重载。
其实c++也可以按照C语言的方式编译文件的,这时我们在函数之前加上entern "C"就可。
二、c++中的引用 2.1什么是引用?
引用是一种特殊类型的变量,也可以认为是另一个变量的别名,通过引用名访问和提高变量名访问效果是一样的。
引用使用模板:类型& 变量名,比如int& ra=a;
#include
using namespace std;
int main(){
int a=0;
int& ra=a; //ra就是a的引用
cout<<"a的值:"<
上边程序演示了引用的使用方法,同时也验证了引用并不是变量内容的拷贝复制,而是变量的别名,因为它们的地址都是一样的。
众所周知,C语言是没有引用的,C语言想要 *** 作变量一般都是使用指针的,指针的使用确实很方便,但是指针的缺点也是非常明显的,一不小心就会导致程序奔溃。
相信大家当初都有被指针支配的恐惧吧,越界访问,访问空指针等等。
引用的出现在极大程度上弱化了指针,我们从下边例子来看。
传值
#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<
现在我们知道了一种不用直接指针就可以 *** 作变量的方法,那就是传递引用,这样就弱化了指针的使用,能降低出错的概率。
常引用声明方式:const 类型& 引用名 =变量名;
#include
using namespace std;
int main(){
int a=1;
const int &ra=a;
//ra=2; //编译不通过
a=3;
cout<
结果:能正常打印3,但是不能打印出2
结论:用const声明的引用,不能通过引用对变量进行修改,可以通过变量本身修改,这极大提升了引用的安全性
好啦,今天的内容到此为止啦,大家明天见哦!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)