跳到主要内容

C++ 函数重载

提示
  1. 函数重载的定义:在C++中,当两个或多个函数具有相同的名称但参数的数量和/或类型不同时,这些函数称为重载函数。
  2. 参数类型和数量的不同:重载函数可以根据参数的不同类型或数量来进行区分,它们可以有相同或不同的返回类型。
  3. 实例和应用:通过使用不同类型或数量的参数,函数重载允许相同名称的函数执行不同的操作。例如,标准库函数sqrt()就是一个重载函数,可以接受不同类型的参数。

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

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

// 相同名称不同参数
int test() { }
int test(int a) { }
float test(double a) { }
int test(int a, double b) { }

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

注意,这 4 个函数的返回类型并不相同。重载函数可能有也可能没有不同的返回类型,但它们必须有不同的参数。例如,

// 错误代码
int test(int a) { }
double test(int b){ }

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

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

// 计算绝对值的程序
// 适用于 int 和 float 类型

#include <iostream>
using namespace std;

// 带有 float 类型参数的函数
float absolute(float var){
if (var < 0.0)
var = -var;
return var;
}

// 带有 int 类型参数的函数
int absolute(int var) {
if (var < 0)
var = -var;
return var;
}

int main() {

// 调用带有 int 类型参数的函数
cout << "-5 的绝对值 = " << absolute(-5) << endl;

// 调用带有 float 类型参数的函数
cout << "5.5 的绝对值 = " << absolute(5.5f) << endl;
return 0;
}

输出

-5 的绝对值 = 5
5.5 的绝对值 = 5.5

C++ 函数重载绝对值函数的工作原理

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

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

#include <iostream>
using namespace std;

// 带有 2 个参数的函数
void display(int var1, double var2) {
cout << "整数: " << var1;
cout << " 和浮点数: " << var2 << endl;
}

// 带有单个 double 类型参数的函数
void display(double var) {
cout << "浮点数: " << var << endl;
}

// 带有单个 int 类型参数的函数
void display(int var) {
cout << "整数: " << var << endl;
}

int main() {

int a = 5;
double b = 5.5;

// 调用带有 int 类型参数的函数
display(a);

// 调用带有 double 类型参数的函数
display(b);

// 调用带有 2 个参数的函数
display(a, b);

return 0;
}

输出

整数: 5
浮点数: 5.5
整数: 5 和浮点数: 5.5

这里,display() 函数被三次调用,每次传入不同的参数。根据传递的参数的数量和类型,调用相应的 display() 函数。

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

这些函数的返回类型都相同,但这并不是函数重载所必需的。

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