目录
一、缺省参数
1.1缺省参数概念
缺少参数是函数在声明或定义时给参数的一个缺省值(预备值),调用函数时,如果没有指定参数的值就使用缺省值,如果指定了就使用指定的参数。
//缺省参数
void op(int a = 0)
{
cout << a << endl;
}
int main()
{
op();//未指定参数值
op(2);//指定参数值
return 0;
}
1.2缺省参数分类
全缺省参数
void xp(int a = 0, int b = 1, int c = 2)
{
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
}
半缺省参数
void cp(int a, int b = 1, int c = 2)
{
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
}
注:
1.缺省值必须是常量或全局变量。
2.半缺省参数必须从右向左缺省,不能间隔或顺序颠倒。
3.缺省参数不能在定义和声明中同时出现,只能出现一个。
二、函数重载
2.1函数重载概念
函数重载是函数的一种特殊情况,在C++编译中,允许在同一作用域出现同名函数,但要求这些函数的形参列表(参数个数、参数类型、参数类型的顺序)不同。
//函数重载
int Sub(int a, int b)
{
cout << "Sub-int" << endl;
return a - b;
}
double Sub(double a, double b)
{
cout << "Sub-double" << endl;
return a - b;
}
int main()
{
Sub(2, 3);//调用int函数
Sub(2.3, 3.2);//调用double函数
return 0;
}
2.2函数重载分类
2.2.1参数类型不同
//函数重载
int Sub(int a, int b)
{
cout << "Sub-int" << endl;
return a - b;
}
double Sub(double a, double b)
{
cout << "Sub-double" << endl;
return a - b;
}
int main()
{
Sub(2, 3);//调用int函数
Sub(2.3, 3.2);//调用double函数
return 0;
}
2.2.2参数个数不同
//函数重载
void Sub()
{
cout << "Sub-空" << endl;
}
void Sub(double a, double b)
{
cout << "Sub-a-b" << endl;
}
int main()
{
Sub();//调用空
Sub(2, 3);//调用a,b函数
return 0;
}
2.2.3参数顺序不同
//函数重载
void Sub(double a,int b)
{
cout << "Sub-double-int" << endl;
}
void Sub(int a, double b)
{
cout << "Sub-int-double" << endl;
}
int main()
{
Sub(2.2,3);//调用double-int
Sub(2, 3.3);//调用int-double
return 0;
}
三、引用
引用是为已经存在的变量取一个别名,本质还是原本的变量,只是变量的另一个称呼。就像张三的外号法外狂徒一样,不管叫哪个名字都是同一个人。
3.1使用方法
类型& 引用变量名=引用实体
int main()
{
int a = 5;
int& b = a;//b引用了a
cout << a << endl;
cout << b << endl;
return 0;
}
3.2引用的要求
1.引用在定义时必须初始化。
int a = 2;
int& b;
2.同一个变量可以被多次引用
int main()
{
int a = 5;
int& b = a;
int& c = a;
cout << a << endl;
cout << b << endl;
cout << c << endl;
return 0;
}
3.引用一但使用,不可更改
int main()
{
int a = 5;
int c = 2;
int& b = a;
int& b = c;//b重定义了
return 0;
}
4.引用类型要相同
int main()
{
int a = 5;
double& b = a;
return 0;
}
5.引用不可初始化为常量
int main()
{
const int a = 5;
int& b = a;
int& c = 10;
return 0;
}
3.3引用和指针的区别
1.引用是变量的别名,指针是变量的地址。
2.引用在定义时必须初始化,指针没有要求。
3.引用不能改变,指针可以。
4.没有NULL引用,有NULL指针。
5.用sizeof计算字节大小时,引用的结果是引用的类型的大小,指针的大小是地址空间的大小。
6.引用+1时是引用的实体加1,指针是向后偏移一个地址的大小。
7.没有多级引用,有多级指针。
四、inline内联函数
用inline修饰的函数叫做内联函数,在C++编译时,内联函数会在调用内联函数的地方展开,不会建立函数栈帧,减少了程序消耗。
1.调用内联函数是用空间换时间的做法,使文件变大,但提高了程序的运行效率。
2.内联函数不可以声明和定义分离,使用inline后,函数没有地址,会有链接错误。
3.内联函数一般只适用于较短的函数,且不是递归频繁调用的函数。如果函数不短,则展开消耗非常大,递归也是,每次递归都展开,消耗非常大。
五、auto关键字
5.1aoto介绍
auto定义的变量会在编译器编译时自动识别变量的类型,但auto定义的变量必须初始化。
int main()
{
auto a = 2;
auto b = 'a';
auto c = 2.2;
cout << typeid(a).name() << endl;//c++查看变量类型
cout << typeid(b).name() << endl;
cout << typeid(c).name() << endl;
return 0;
}
5.2aotu使用方法
5.2.1auto定义指针
auto定义指针时可以加上*,也可以不加*,但加*时必须定义指针。
5.2.2auto定义引用
auto定义引用时必须加上&,否则就成了赋值初始化。
int main()
{
int a = 5;
auto& b = a;//引用
auto c = a;//初始化c=5;
return 0;
}
5.2.3auto同时定义多个变量
使用auto定义多个变量时必须定义相同类型的变量。
注:
1.auto不能作为函数的参数。
2.auto不能定义数组。
六、nullptr(空指针)
在C++中NULL被定义成了0,不再代表空的含义。为了表示空,C++11中引入了关键字nullptr。
其内涵与C语言中的NULL相同。