如何让理解C++中的函数重载和C++函数的默认参数。函数重载的二义性怎么产生的?

函数重载:
条件:
1、函数名相同
2、函数参数个数不同、参数类型不同、参数的顺序不同

注意事项:
1、返回值类型与函数重载无关
2、实参的隐式类型转换可能会产生二义性(这个会在下面的代码中体现)

默认参数
定义:
在C++中,定义函数时可以给形参指定一个默认的值,此时在调用这个函数时没有给这个形参赋值(没有对应的实参),那么就是使用这个默认的值,也就是说在调用函数时可以省略有默认值的参数。

注意事项:
1、默认参数只能按照右到左的顺序
2、如果函数同时有声明、实现,默认参数只能放在函数声明中
3、默认参数的值可以是常量、全局符号(全局变量、函数名)

: (如果函数的实参经常是同一个值, 此时可以考虑使用默认参数)

函数重载代码示例:

#include <iostream>
using namespace std;

int add(int a,int b) {
	return a + b;
}

int add(int a, int b,int c) {
	return a + b + c;
}

double add(double a, int b) {
	return a + b;
}

int main() {

	cout << add(1,2) << endl;

	cout << add(1.2, 2) << endl;

	cout << add(1,2,3) << endl;

	getchar();
	return 0;
}

运行结果:
在这里插入图片描述

默认参数代码示例:

int add(int a, int b, int c=1) {
	return a + b + c;
}

int main() {

	cout << add(1, 2) << endl;

	getchar();
}

运行结果
在这里插入图片描述
二义性:代码如下所示,对于add(1,2),两个重载函数都可以被调用,此时编译器不知道选择哪个函数,就会产生二义性,所以编译会出错;(建议优先采用默认参数)

int add(int a, int b) {
	return a + b;
}

int add(int a, int b, int c=1) {
	return a + b + c;
}

int main() {

	cout << add(1, 2) << endl;//编译会出错

	getchar();
}

猜你喜欢

转载自blog.csdn.net/qq_47329614/article/details/106889988