提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、什么是函数重载?
- 二、如何判断是不是函数重载?
- 总结
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是函数重载?
函数重载(Function Overloading)是C++中的一个特性,它允许在同一个作用域内声明多个同名函数,只要它们的参数列表不同即可。参数列表的不同可以是参数的数量不同,参数的类型不同,或者参数的顺序不同。函数重载使得函数的名称可以更具有通用性,同时编译器会根据函数调用时提供的参数类型和数量来决定调用哪个具体的函数。
以下是函数重载的一些关键点:
-
参数数量不同: 可以为同一个函数名定义多个函数,只要它们的参数数量不同。例如:
void print() {// 打印空行 } void print(int a) {// 打印一个整数 }
-
参数类型不同: 可以为同一个函数名定义多个函数,只要它们的参数类型不同。例如:
void print(int a) {// 打印一个整数 } void print(double a) {// 打印一个浮点数 }
-
参数顺序不同: 可以为同一个函数名定义多个函数,只要它们的参数顺序不同。例如:
void print(int a, double b) {// 先打印整数,再打印浮点数 } void print(double b, int a) {// 先打印浮点数,再打印整数 }
-
返回类型不同: 仅通过返回类型不同来区分函数重载是不允许的。例如,以下代码会导致编译错误:
int print(int a) {// 返回整数 } double print(int a) {// 尝试返回浮点数,这是错误的 }
-
const修饰符: 仅通过const修饰符不同来区分函数重载也是不允许的。例如:
void print(int a) {// 非const版本 } void print(int a) const {// const版本,这是错误的 }
-
函数指针: 函数指针的类型取决于函数的参数类型和数量,而不是返回类型。因此,可以通过函数指针来调用重载函数。
-
模板函数: 模板函数可以与非模板函数重载,或者与其他模板函数重载,只要它们的参数列表不同。
函数重载提高了代码的可读性和可维护性,使得函数名可以更加直观地反映其功能,同时允许开发者为不同的参数类型提供专门的实现。然而,过度使用函数重载可能会导致代码难以理解和维护,因此应该谨慎使用。
二、如何判断是不是函数重载?
C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者
类型不同。这样C++函数调⽤就表现出了多态⾏为,使⽤更灵活。C语⾔是不⽀持同⼀作⽤域中出现同
名函数的。
①通过参数智能去匹配:传的是整形int就匹配int函数,传的是浮点double就匹配double函数
但是C语言不允许在同一作用域有相同的函数
②参数类型不同 ;参数个数不同 ;参数类型顺序不同 (只看参数)。 返回值不同不构成重载
#include<iostream>
using namespace std;// 1、参数类型不同
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;
}// 2、参数个数不同
void f()
{
cout << "f()" << endl;
}
void f(int a)
{
cout << "f(int a)" << endl;// 3、参数类型顺序不同
void f(int a, char b)
{
cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
cout << "f(char b, int a)" << endl;
}void f1()
{
cout << "f()" << endl;
}
void f1(int a = 10)
{
cout << "f(int a)" << endl;
}
int main()
{
Add(10, 20);
Add(10.1, 20.2);
f();
f(10);
f(10, 'a');
f('a', 10);
return 0;
}
总结
调用有歧义