原文: https://www.programiz.com/cpp-programming/function-overloading

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

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

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

  1. // same number different arguments
  2. int test() { }
  3. int test(int a) { }
  4. float test(double a) { }
  5. int test(int a, double b) { }

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

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

  1. // Error code
  2. int test(int a) { }
  3. double test(int b){ }

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


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

  1. // Program to compute absolute value
  2. // Works for both int and float
  3. #include <iostream>
  4. using namespace std;
  5. // function with float type parameter
  6. float absolute(float var){
  7. if (var < 0.0)
  8. var = -var;
  9. return var;
  10. }
  11. // function with int type parameter
  12. int absolute(int var) {
  13. if (var < 0)
  14. var = -var;
  15. return var;
  16. }
  17. int main() {
  18. // call function with int type parameter
  19. cout << "Absolute value of -5 = " << absolute(-5) << endl;
  20. // call function with float type parameter
  21. cout << "Absolute value of 5.5 = " << absolute(5.5f) << endl;
  22. return 0;
  23. }

输出

  1. Absolute value of -5 = 5
  2. Absolute value of 5.5 = 5.5

C   函数重载 - 图1

absolute()函数重载的原理

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


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

  1. #include <iostream>
  2. using namespace std;
  3. // function with 2 parameters
  4. void display(int var1, double var2) {
  5. cout << "Integer number: " << var1;
  6. cout << " and double number: " << var2 << endl;
  7. }
  8. // function with double type single parameter
  9. void display(double var) {
  10. cout << "Double number: " << var << endl;
  11. }
  12. // function with int type single parameter
  13. void display(int var) {
  14. cout << "Integer number: " << var << endl;
  15. }
  16. int main() {
  17. int a = 5;
  18. double b = 5.5;
  19. // call function with int type parameter
  20. display(a);
  21. // call function with double type parameter
  22. display(b);
  23. // call function with 2 parameters
  24. display(a, b);
  25. return 0;
  26. }

输出

  1. Integer number: 5
  2. Float number: 5.5
  3. Integer number: 5 and double number: 5.5

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

C   函数重载 - 图2

display()函数重载的原理

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


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