Bootstrap

《重生到现代之从零开始的C++生活》—— 入门基础语法2

缺省参数

缺省参数就是在函数的声明和定义里制定一个缺省值,如果没有指定的实参就用该形参的缺省值

void add (int a=0,int b=0){

  return a+b;

}

简单的的说就是将形式参数附一个值,如果没有实参传入的话,就默认用形参的值

void add (int a=0,int b=3){

  return a+b;

}
int main (){
  int a=1;
  int b=5;
  add(a,b);//结果为6
  add(a);//结果为4,因为缺少实参传给b,所以就运用缺省参数附给的值
  return 0;
}

值得一体的是,缺省参数的形参部分只能从右往左赋值

void add (int a,int b=0){

  return a+b;

}//可以!!!
void add (int a=0,int b){

  return a+b;

}//不行!!!

传参的部分只能从左往右传参

void add (int a=0,int b=3){

  return a+b;

}
int main (){
  int a=1;
  int b=5;
  add(a);//可以!!!
  return 0;
}
void add (int a=0,int b=3){

  return a+b;

}
int main (){
  int a=1;
  int b=5;
  add(,b);//不行!!!
  return 0;
}

缺省参数不能同时在声明和定义里出现,因为如果有冲突不知道按哪个来,所以只在声明里用缺省参数

函数重载

在C语言中,我们想同时定义两个名字一样的函数就会报错,在C++中,我们可以同时定义多个命名一样的函数,但是也有要求

  • 形参不同

同一个名字的函数形式参数不同,像是类型之类的不同

  • 形参的个数不同

这样的函数,就算命名一样也能根据实参来自动识别运用哪个函数

比如说cin和cout,其实每输入输出不同类型的变量,用的都是不一样的cin和cout函数,就用到了函数重载

引用

就是一个大重点,我们先来看看引用是什么

int a=8;
int & b=a;

b就是a的一个引用

引用,就是像是小名一样,不管小名是什么,都说的是你

可以说,类型+&+小名=真名

不像是指针,引用还是这一个变量的空间,相当于又创建一个变量来指向当前变量,不会另外的开辟空间

引用也有一些特性

  • 引用后就不能修改引用的值,不能引用其他的变量
  • 引用必须初始化
  • 一个变量可以有多个引用

我个人觉得引用最重要的地方就是可以通过改变引用的值来改变原本的对象,就是比指针方便很多(在一些领域)

但是要说明的是指针在C++中有不可替代性,只是在一些领域用引用会好一些

比如

  • 函数传参
void add (int& a,int& b){

  return a+b;

}
int main (){
  int p=1;
  int d=5;
  add(p,d);
  return 0;
}

这样在传参数时,在函数内可以改变实参

  • 引用做返回值

当我们在面对这样一段代码时

void add (int& a,int& b){

  return a+b;

}
int main (){
  int p=1;
  int d=5;
  add(p,d)+=1;//报错
  return 0;
}

为什么报错呢???

因为return a+b 的值会先拷贝在一个临时对象或者寄存器里,而这个值具有常性,不能修改,在进行这样的操作后,就会报错,那么我们怎么避免这种情况呢

int& add (int& a,int& b){
  int c=a+b;
  return c ;

}
int main (){
  int p=1;
  int d=5;
  add(p,d)+=1;
  return 0;
}

引用做函数返回值,函数返回的是返回对象的别名,这样函数成立

当然在实践中我们不会这么写,只能说是让大家知道引用的作用,在语法上没问题,但是在逻辑上会有问题

const引用

在C语言中,我们会用const来赋予一个变量常性,就是将变量改为常量

当然我们也可以引用const对象,但必须用const引用,这就涉及到访问权限的问题

比如说你的日记,你不然你们班的人看,但是有一个人说“我现在用的是小名,你们班的名单上面没有这个人,我可以看了”,这显然是不行的,这就是同学将访问权限放大了,而访问权限可以平移,缩小,不能放大,大家应该可以理解了

const int a=8;
int p=8;

int & b=a;//放大
const int & c=a;//平移
const int & d=p;//缩小

还有就是当我们在转换类型时

int a=9;
float b=a;

在这个转换的过程中会产生一个临时变量,在传给b

所以如果要用引用也得用const

int a=9;
const float & b=a;

nullptr

在C++中。NULL可能会被定义为字面常量0;在函数重载中可能会有歧义,所以推出了nullptr

nullptr和NULL的作用一样,但是只能转换为指针类型,他是一个特殊类型的字面量

可以转换为任意类型的指针类型,可以避免类型转换问题


今天的知识讲解完啦,如果觉得有用可以点一下赞和关注,也可以先收藏以防需要时找不到哦,当然如果作者写的哪里有问题欢迎指出,我们一起进步!!!
祝看到这里的人天天开心哦(笔芯)

;