C++入门
- 1.缺省参数
- 1.1. 缺省参数举例和概念
- 1.2. 函数的传参是从左到右给参数的
- 1.3.缺省参数分类
- 1.4. 缺省参数的函数声明与定义
- 2.函数重载
- 2.1.函数重载的概念
- 2.2. 函数重载的情况
- 2.3.剖析C语言不能函数重载而C++却可以的原因
- 2.3.1. 编译链接过程
- 2.3.2. 函数名修饰规则
- 3.引用
- 3.1. 引用概念
- 3.2.引用特性
- 3.3. 引用做函数参数
1.缺省参数
1.1. 缺省参数举例和概念
**概念:**缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
1.2. 函数的传参是从左到右给参数的
注意:C++函数传参只能是从左到右的,中间不能条过参数,也不能指定给参数传参。
1.3.缺省参数分类
- 全缺省参数
void Func(int a = 10, int b = 20, int c = 30)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
- 半缺省参数
void Func(int a, int b = 10, int c = 20)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
**注意:**半缺省参数要从右往左的连续缺省,中间不能隔着!
1.4. 缺省参数的函数声明与定义
缺省参数不能在函数的声明与定义中同时出现。因为:如果生命与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。
可见,在函数声明的时候使用省缺参数,在函数定义的时候不能使用省缺参数。因为,编译的时候是先找到函数声明的地方的,如果声明没有用省缺参数,当传值少的时候,编译器就会认为这个函数没有省缺参数,参数传值认为过少,编译不通过。所以最好在函数声明的时候使用省缺参数,在函数定义的时候不用。
2.函数重载
**重载解释:**一个词有多个含义或解释;自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。
比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!”
2.1.函数重载的概念
函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。
2.2. 函数重载的情况
①参数类型不同
②参数个数不同
**注意:**存在省缺参数的时候,是构成重载函数的,当是编译器有时候会无法识别多个匹配的函数,从而报错。
③参数类型的顺序不同
注意:
①仅参数名字顺序不同,不构成函数重载!
②仅是函数的返回值不相同,不构成函数重载!
2.3.剖析C语言不能函数重载而C++却可以的原因
2.3.1. 编译链接过程
编译的时候找到函数的声明或者直接找到函数的定义;函数的定义查找在链接的过程。
C语言和C++的函数调用的时候是不管函数返回值类型的。
2.3.2. 函数名修饰规则
C语言
链接的时候只是看函数的名。
C++
C++函数链接的时候看根据函数名修饰规则查找函数的。
综上所述:C++存在函数重载,而C语言不存在。不能根据函数的返回类型不同来判断是否是函数重载,因为函数调用的时候不看函数的返回值类型,在编译的时候,编译器无法识别要调用哪个函数,所以该定义无法通过编译,更不会到链接的步骤。
3.引用
3.1. 引用概念
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
使用:类型& 引用变量名(对象名) = 引用实体
void TestRef()
{
int a = 10;
int& ra = a;//<====定义引用类型
printf("%p\n", &a);
printf("%p\n", &ra);
}
注意:引用类型必须和引用实体是同种类型的
3.2.引用特性
- 引用在定义的时候必须初始化;
- 一个变量可以有多个引用;
- 引用一旦一个实体,不能在引用其他实体;即后面的相等是赋值。