# C++ 函数重载

> 原文： [https://www.programiz.com/cpp-programming/function-overloading](https://www.programiz.com/cpp-programming/function-overloading)

#### 在本教程中，我们将通过示例学习 C++ 中的函数重载。

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

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

```cpp
// same number different arguments
int test() { }
int test(int a) { }
float test(double a) { }
int test(int a, double b) { }
```

在此，所有 4 个函数均为重载函数。

请注意，所有这四个函数的返回类型都不相同。 重载的函数可以具有或可以不具有不同的返回类型，但是它们必须具有不同的参数。 例如，

```cpp
// Error code
int test(int a) { }
double test(int b){ }
```

在这里，两个函数具有相同的名称，相同的类型和相同数量的参数。 因此，编译器将引发错误。

* * *

## 带有不同类型参数的函数重载

```cpp
// Program to compute absolute value
// Works for both int and float

#include <iostream>
using namespace std;

// function with float type parameter
float absolute(float var){
    if (var < 0.0)
        var = -var;
    return var;
}

// function with int type parameter
int absolute(int var) {
     if (var < 0)
         var = -var;
    return var;
}

int main() {

    // call function with int type parameter
    cout << "Absolute value of -5 = " << absolute(-5) << endl;

    // call function with float type parameter
    cout << "Absolute value of 5.5 = " << absolute(5.5f) << endl;
    return 0;
}
```

**输出**

```cpp
Absolute value of -5 = 5
Absolute value of 5.5 = 5.5
```

![Working of C++ Function Overloading for absolute()](img/160029b2e9a06cf2c3623f1100063f90.png "Working of C++ Function Overloading for absolute()")

`absolute()`函数重载的原理



在此程序中，我们重载了`absolute()`函数。 根据函数调用期间传递的参数类型，将调用相应的函数。

* * *

## 带有不同数量的参数的函数重载

```cpp
#include <iostream>
using namespace std;

// function with 2 parameters
void display(int var1, double var2) {
    cout << "Integer number: " << var1;
    cout << " and double number: " << var2 << endl;
}

// function with double type single parameter
void display(double var) {
    cout << "Double number: " << var << endl;
}

// function with int type single parameter
void display(int var) {
    cout << "Integer number: " << var << endl;
}

int main() {

    int a = 5;
    double b = 5.5;

    // call function with int type parameter
    display(a);

    // call function with double type parameter
    display(b);

    // call function with 2 parameters
    display(a, b);

    return 0;
}
```

**输出**

```cpp
Integer number: 5
Float number: 5.5
Integer number: 5 and double number: 5.5
```

在此，`display()`函数使用不同的参数调用了三次。 根据传递的参数的数量和类型，调用相应的`display()`函数。

![Working of C++ Function Overloading for display()](img/7d396cbdd7be9656e4100c41f029f329.png "Working of C++ Function Overloading for display()")

`display()`函数重载的原理



所有这些函数的返回类型都相同，但函数重载不必如此。

* * *

**注意**：在 C++ 中，许多标准库函数都已重载。 例如，`sqrt()`函数可以将`double`，`float`，`int,`等作为参数。 这是可能的，因为`sqrt()`函数在 C++ 中已重载。