如有错误欢迎指正
文章目录
前言
本文介绍了c++函数的缺省参数和重载,引用
函数重载是为了解决c语言不能有相同的函数名而产生的,常用来处理实现功能类似数据类型
不同的问题。
引用的出现是因为指针有时过于复杂不好理解。
一、缺省参数
1. 半缺省参数必须从右往左依次来给出,不能间隔着给
2. 缺省参数不能在函数声明和定义中同时出现
3.缺省参数不能同时声明和定义,推荐在声明给
缺省值必须是常量
void Func ( int a = 0 ){cout << a << endl ;}int main (){Func (); // 没有传参时,使用参数的默认值Func ( 10 ); // 传参时,使用指定的实参return 0 ;}半缺省void Func ( int a , int b = 10 , int c = 20 ){cout << "a = " << a << endl ;cout << "b = " << b << endl ;cout << "c = " << c << endl ;}全缺省void Func ( int a = 10 , int b = 20 , int c = 30 ){cout << "a = " << a << endl ;cout << "b = " << b << endl ;cout << "c = " << c << endl ;}
二、函数重载
函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这
些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型
不同的问题。
#include<iostream>
using namespace std;
int Add(int left, int right)
{
cout << "int Add(int left, int right)" << endl;
return left + right;
}
double Add(double left, double right)
{
cout << "double Add(double left, double right)" << endl;
return left + right;
}
int main()
{
Add(10, 20);
Add(10.1, 20.2);
return 0;
}
1. 为什么c++函数名可以重复而c不可以呢?
因为c是直接用函数名去找,而c++是用修饰过后的函数名去找
c++在编译时会对对函数名进行了修饰
函数名修饰的规则,不同编译器规则不同,我们也不需要掌握,不过修饰出来的名字和参数有关,所以重载需要参数不同
2.那么返回值不同能不能构成重载?为什么?
第一次遇到这个问题时我自然而然的想当然不行了,函数名修饰和参数相关,和返回值不相关,那么问题又来了。
3.如果返回值进了修饰规则,那么返回值不同能不能构成重载?
还是不能,因为这样虽然编译时可以,但调用时却无法区分,因为函数调用时不写返回值,所以没法区分。
三.引用
引用就是取别名
c++里面会共用符号
int main()
{
int i = 0;
int& k = i;//引用
int j = i;//赋值
cout << &i << endl;
cout << &k << endl;
cout << &j << endl;
++k;
++j;
cout << i << endl;
cout << k << endl;
cout << j << endl;int& l = i;
int& z = k;
cout << &l << endl;
cout << &z << endl;
int* pi = &i;
int*& p = pi;
cout << &i << endl;
cout << &pi << endl;
cout << &p << endl;
}
从上面的代码可以看出
赋值和引用是不同的,赋值是j另外开辟了一块空间,然后将i的值拷贝到j。引用没有另开一片空间,只是取了一个别名表示,j的改变不会影响i,k改变i随之改变。
可以给别名取别名,也可以一个变量取多个别名
任何类型都可以取别名
总结
引用的出现增加了代码的可读性,可以有效代替二级指针。