目录
1、缺省参数(不能在函数声明和定义中同时出现,若声明和定义是分开的,则缺省参数放在声明里面)
1.1、缺省参数的概念
1.2、全缺省
1.3、半缺省
2、函数重载
2.1、特殊情况
2.2、特殊情况
2.3、为什么C++支持函数重载而C语言不支持(10_12_1:40)
3、引用
3.1、概念:
3.2、引用就是取别名,别名变原名也变
3.3、引用的传参(核心)
3.4、C++引用的几种错误写法
3.4.1、引用必须初始化
3.4.2、C++中的引用初始化后,就不能第二次改变引用的指向:
3.5、引用作为返回值
3.5.1、错误的使用,这种直接返回的值是不确定的
3.5.2、正确使用,将要返回的变量设置为静态变量;
3.5.3、引用做返回值的价值
1、缺省参数(不能在函数声明和定义中同时出现,若声明和定义是分开的,则缺省参数放在声明里面)
1.1、缺省参数的概念
缺省参数是 声明或定义函数时 为函数的 参数指定一个缺省值(缺省值只能为常量或者全全局变量) 。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
1.2、全缺省
即所有参数都给定默认值,如下:
1.3、半缺省
即只有部分参数指定默认值,但缺省值必须从右往左连续给定,即没有默认值的参数必须放在最左边:
2、函数重载
即运行函数名相同,根据参数列表(包括参数个数,参数类型,类型顺序)的不同,调用对应的函数。
注意:紧靠返回值不同不能构成重载,返回值不参与重载。
2.1、特殊情况
这种情况理论上说是可以的,因为整形和浮点型之间存在隐式类型转换,但由于我重载函数中既有整形参数又有浮点型参数,就不知道谁转换成谁,就产生了二义性。
2.2、特殊情况
当重载和缺省参数相遇时,如下:
这样可以构成重载函数,但因为缺省参数的存在,导致他不知道该调用哪个函数,产生二义性;
2.3、为什么C++支持函数重载而C语言不支持(10_12_1:40)
3、引用
3.1、概念:
引用 不是新定义一个变量,而 是给已存在变量取了一个别名 ,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
3.2、引用就是取别名,别名变原名也变
3.3、引用的传参(核心)
我们以交换两个数的功能为例://C语言写法 void Swap(int* p1, int* p2) { int tmp = *p1; *p1 = *p2; *p2 = tmp; } //C++写法 void Swap(int& p1, int& p2) { int tmp = p1; p1 = p2; p2 = tmp; } int main() { int a = 0, b = 1; //C语言传参 Swap(&a, &b); //C++传参 Swap(a, b); return 0; }
3.4、C++引用的几种错误写法
3.4.1、引用必须初始化
3.4.2、C++中的引用初始化后,就不能第二次改变引用的指向:
int main() { int a = 0; int& c = a; int d = 1; //下面这一步是赋值,执行过后a和c的值都为1 //而不是c变成d的引用 c = d; return 0; }
所以C++中的引用并不能完全替代指针,例如不适合链表的插入结点操作,指针域如果是个引用就不能改变指向
3.5、引用作为返回值
3.5.1、错误的使用,这种直接返回的值是不确定的
因为出了作用域,对象就会被销毁,n空间处的数据可能会被摧毁也有可能保存,所以会是个不确定的值。
3.5.2、正确使用,将要返回的变量设置为静态变量;
由于变量c是静态变量,定义在静态区,这样函数test的栈帧的销毁就不影响c,而b就是c的引用,所以可以这样使用。又由于静态变量只能初始化一次,所以下面第二次调用test函数也不会影响c的值,即不会影响引用b的值。如果是下面这种情况就会影响其值:
3.5.3、引用做返回值的价值
(1)、可以提高效率;
(2)、可以修改返回对象;
3.6、常引用
//未完待续