C++ 函数重载

函数重载允许一个函数可以拥有不同的行为。在本教程中,我们将通过示例了解 C++ 中的函数重载。

在 C++ 中,如果传递的参数数量和/或类型不同,则两个函数可以具有相同的名称。

这些名称相同但参数不同的函数称为重载函数。例如:

int test() { }
int test(int a) { }
float test(double a) { }
int test(int a, double b) { }

在这里,所有 4 个函数都是重载函数。

请注意,重载函数的返回类型可能相同,也可能不同。也就是说,重载函数的值要求参数必须不同,不要求返回值类型。例如,

int test(int a) { }
double test(int b){ }

在这里,两个函数具有相同的名称、相同的类型和相同数量的参数。因此,编译器会抛出错误。

示例 1:使用不同类型的参数重载

本例使用函数重载实现了一个用于计算整数和小数绝对值的功能。

#include <iostream>
using namespace std;

// 求取小数的绝对值
float absolute(float var){
    if (var < 0.0)
        var = -var;
    return var;
}

// 求取整数的绝对值
int absolute(int var) {
     if (var < 0)
         var = -var;
    return var;
}

int main() {

    cout << "Absolute value of -5 = " << absolute(-5) << endl;
    cout << "Absolute value of 5.5 = " << absolute(5.5f) << endl;
    return 0;
}

输出

Absolute value of -5 = 5
Absolute value of 5.5 = 5.5

C++ 函数重载原理
C++ 函数重载原理

在这个程序中,我们重载了这个 absolute() 函数。根据函数调用时传递的参数类型,调用相应的函数。

示例 2:使用不同数量的参数进行重载

本示例使用了不同的参数数量重载了 display 函数。

#include <iostream>
using namespace std;

// 有 2 个参数
void display(int var1, double var2) {
    cout << "Integer number: " << var1;
    cout << " and double number: " << var2 << endl;
}

// 有 1 个 double 参数
void display(double var) {
    cout << "Double number: " << var << endl;
}

// 有 1 个 int 参数
void display(int var) {
    cout << "Integer number: " << var << endl;
}

int main() {

    int a = 5;
    double b = 5.5;

    display(a);
    display(b);
    display(a, b);

    return 0;
}

输出

Integer number: 5
Double number: 5.5
Integer number: 5 and double number: 5.5

在这里,该 display() 函数使用不同的参数被调用了 3 次。根据传递的参数的数量和类型,调用相应的 display() 函数。

C++ 函数重载 display() 工作原理
C++ 函数重载 display() 工作原理

本例中,所有这些函数的返回类型都是相同的,但函数重载不一定是这种情况。

**注意:**在 C++ 中,许多标准库函数被重载。例如,该 sqrt() 函数可以采取 doublefloatint 等作为参数。

结论

在本文中,我们学习了 C++ 中的函数重载。

  • 函数重载为同一个函数名增加了不同的行为。
  • 重载函数具有不同的参数数量或者类型。
  • 重载函数的返回值可能是不同的,也可能是相同的。