函数提高

1. 函数默认参数

  • 在c++中,函数的形参列表中的形参可以有默认值。

  • 语法:返回值类型 函数名 (参数 = 默认值){}

  • 注意:

    (1)如果某个位置已经有了默认参数,那么聪慧这个位置往后,从左到右都必须有默认值。
    (2)函数的声明和实现只能有一个地方写默认参数。

示例:

1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
int func(int a, int b = 10, int c = 20) {
return a + b + c;
}
int main() {
cout << func(10) << endl;
cout << func(10, 10, 10) << endl;
return 0;
}

运行结果:

1
2
40
30

2. 函数的占位参数

  • c++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置。
  • 语法:返回值类型 函数名 (数据类型){}
  • 占位参数可以有默认参数。
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
void func(int a , int = 10) {
cout << "this is a func" << endl;
}
int main() {
func(10, 10);//占位参数必须填补
func(20);//占位参数有默认参数
return 0;
}

3.函数重载

3.1 函数重载概述

  • 作用:函数名可以相同,提高复用

  • 函数重载满足条件

    (1)同一个作用域下

    (2)函数名称相同

    (3)函数参数类型不同或者个数不同或者顺序不同

  • 注意:函数的返回值不可以作为函数重载的条件

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
using namespace std;
void func() {
cout << "func() 的调用" << endl;
}
void func(int a) {
cout << "func(int a) 的调用" << endl;
}
void func(double a) {
cout << "func(double a) 的调用" << endl;
}
void func(double a, int b) {
cout << "func(double ,int)的调用" << endl;
}
void func(int a, double b) {
cout << "func(int ,double)的调用" << endl;
}
//函数的返回值不可以作为函数重载的条件
//int func() {
// cout << "func() 的调用" << endl;
//}
int main() {
func();
func(10);
func(2.1);
func(1, 2.1);
func(2.1, 1);
return 0;
}

运行结果:

1
2
3
4
5
func() 的调用
func(int a) 的调用
func(double a) 的调用
func(int ,double)的调用
func(double ,int)的调用

3.2 函数重载注意事项

  • 引用作为重载条件

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;

void func(int &a) {
cout << "func(int &a) 的调用" << endl;
}
void func(const int &a) {
cout << "func(const int &a) 的调用" << endl;
}
int main() {
int a = 10;
func(a);//a本身是变量,可读可写

func(10);
//若是调用func(int &a),相当于执行一条int &a = 10;这是不合法的。
//调用func(const int &a),相当于是 const int &a = 10; 这是合法的。
return 0;
}

运行结果:

1
2
func(int &a) 的调用
func(const int &a) 的调用
  • 函数重载碰到函数默认值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
void func(int a,int = 10) {
cout << "func(int a,int 10) 的调用" << endl;
}
void func(int a) {
cout << "func(int a)的调用" << endl;
}
int main() {
int a = 10;
//func(10);//报错,当函数重载碰到默认参数,会出现二义性
func(10,10);
return 0;
}