C++基础(18)C++ 重载(函数)

514 阅读2分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第18篇文章,点击查看活动详情

C++ 重载(函数)

如果我们创建两个或多个具有相同名称但参数数量或类型不同的成员,则称为 C++ 重载。在 C++ 中,我们可以重载:

  • 方法,
  • 构造函数和
  • 索引属性

这是因为这些成员只有参数。

C++ 中的重载类型有:

  • 函数重载
  • 运算符重载

C++ 函数重载

函数重载定义为具有两个或多个同名但参数不同的函数的过程,在 C++ 中称为函数重载。在函数重载中,通过使用不同类型的参数或不同数量的参数来重新定义函数。只有通过这些差异编译器才能区分功能。
函数重载的优点是它增加了程序的可读性,因为你不需要为同一个动作使用不同的名字。
示例:更改 add() 方法的参数数量

// 参数数量变化时的函数重载程序
#include <iostream>
using namespace std;
class Cal {
public:
	static int add(int a, int b) { return a + b; }
	static int add(int a, int b, int c)
	{
	return a + b + c;
	}
};
int main(void)
{
	Cal C; // class object declaration.
	cout << C.add(10, 20) << endl;
	cout << C.add(12, 20, 23);
	return 0;
}

输出

30 
55

示例:当参数的类型不同时。

// 具有不同类型参数的函数重载程序。
#include <iostream>
using namespace std;
int mul(int, int);
float mul(float, int);

int mul(int a, int b) { return a * b; }
float mul(double x, int y) { return x * y; }
int main()
{
	int r1 = mul(6, 7);
	float r2 = mul(0.2, 3);
	cout << "r1 is : " << r1 << endl;
	cout << "r2 is : " << r2 << endl;
	return 0;
}

输出\

r1 is : 42
r2 is : 0.6

函数重载和歧义

当编译器无法决定在重载函数中调用哪个函数时,这种情况称为函数重载
当编译器显示歧义错误时,编译器不会运行程序。
函数重载的原因:

  • 类型转换。
  • 具有默认参数的函数。
  • 通过引用传递的函数。

类型转换:-

#include <iostream>
using namespace std;
void fun(int);
void fun(float);
void fun(int i)
{
	cout << "Value of i is : " << i << endl;
}
void fun(float j)
{
	cout << "Value of j is : " << j << endl;
}
int main()
{
	fun(12);
	fun(1.2);
	return 0;
}

上面的例子显示了一个错误“重载 'fun(double)' 的调用不明确”。fun(10) 将调用第一个函数。fun(1.2) 根据我们的预测调用第二个函数。但是,这并不像 C++ 中那样引用任何函数,所有浮点常量都被视为双精度而不是浮点数。如果我们将 float 替换为 double,则程序可以运行。因此,这是从 float 到 double 的类型转换。
具有默认参数的函数:-

#include <iostream>
using namespace std;
void fun(int);
void fun(int, int);
void fun(int i)
{
	cout << "Value of i is : " << i << endl;
}
void fun(int a, int b = 9)
{
	cout << "Value of a is : " << a << endl;
	cout << "Value of b is : " << b << endl;
}
int main()
{
	fun(12);

	return 0;
}

上面的例子显示了一个错误“重载 'fun(int)' 的调用是不明确的”。fun(int a, int b=9) 可以通过两种方式调用:第一种是使用一个参数调用函数,即 fun(12),另一种是使用两个参数调用函数,即 fun(4 ,5)。fun(int i) 函数使用一个参数调用。因此,编译器无法在 fun(int i) 和 fun(int a,int b=9) 之间进行选择。
通过引用传递的功能:-

#include <iostream>
using namespace std;
void fun(int);
void fun(int&);
int main()
{
	int a = 10;
	fun(a); // error, which f()?
	return 0;
}
void fun(int x) { cout << "Value of x is : " << x << endl; }
void fun(int& b)
{
	cout << "Value of b is : " << b << endl;
}

上面的例子显示了一个错误“重载 'fun(int&)' 的调用是不明确的”。第一个函数接受一个整数参数,第二个函数接受一个引用参数作为参数。在这种情况下,编译器不知道用户需要哪个函数,因为 fun(int) 和 fun(int &) 之间没有语法差异

如果大家在阅读我的文章的时候发现了一些错误,欢迎在评论区留言告诉我。我是一个正在学习C++的蒟蒻,关注我,我们一起加油。