首页 > 编程笔记 > C++笔记 阅读:12

C++函数重载的用法(附带实例)

C++ 中,同一作用域内不能定义同名的变量,否则程序会编译出错;也不能定义同名的函数,否则会带来冲突问题。

但实际开发中,经常需要处理功能几乎相似,仅传入参数不同(参数类型或参数个数不同)的问题,编写大量的函数并分别命名非常麻烦。为了提高代码的复用性和可读性,C++ 允许通过函数参数列表来识别同名函数,这就是函数重载。

所谓函数重载,是指多个函数具有相同的函数名,但参数列表不同,函数调用时,编译器根据传入的参数类型及参数个数来区分调用的是哪个函数。

函数重载是 C++ 中非常重要的特性,它可以提高程序的效率,使代码更加简洁、直观、高效。

【实例】使用重载函数实现两个数相加。本实例中,定义 int Add(int x, int y) 函数,再定义 double Add(double x, double y) 函数,这两个函数的名称都是 Add,仅参数类型不同。在主函数中调用这两个函数,输出两数相加结果。代码如下:
#include <iostream>
using namespace std;
int Add(int x, int y)  //定义函数 add(),返回两个整数的和
{
    cout << "调用 int add()函数" << endl;
    return x + y;
}
double Add(double x, double y)  //重载函数 add(),返回两个双精度数的和
{
    cout << "调用 double add()函数" << endl;
    return x + y;
}
int main()
{
    int ivar = Add(5, 2);  //调用 int Add()函数
    cout << "sum = " << ivar << endl;
    float fvar = Add(10.5, 11.4);  //调用 double Add()函数
    cout << "sum = " << fvar << endl;
    return 0;
}
程序运行结果为:

调用 int add()函数
sum = 7
调用 double add()函数
sum = 21.9

程序中重载了函数 Add(),在 main() 中调用时给出不同的实参类型,由编译器进行区分。语句“int ivar =Add(5,2);”的实参类型是整型,语句“float fvar = Add(10.5,11.4);”的实参类型是双精度,编译器可以区分它们,正确调用相应的函数。

在定义重载函数时,应注意函数的返回值类型不作为区分重载函数的一部分。例如,下面的重载函数是非法的:
int Add(int x, int y)  //定义一个重载函数
{
    return x + y;
}
double Add(int x, int y)  //定义第二个重载函数
{
    return x + y;
}

相关文章