C++ 函数重载



C++中的函数重载

如果一个类有多个同名但参数不同的函数,则称它们为重载,函数 重载可以让你为不同的函数使用相同的名称。

函数重载通常用于增强程序的可读性,比如你想通过传递不同数量或类型的参数来执行同一个功能,这时你应该使用重载函数。



重载函数的不同方法

  1. 通过改变参数的数量。
  2. 通过传递不同类型的参数。


函数重载:不同数量的参数

在这种类型的函数重载中,我们定义了两个具有相同名称但相参数数量不同的函数,例如,在下面的示例中,我们创建了两个 sum() 函数来返回两个和三个整数的和。

// 第一个函数
int sum (int x, int y)
{
    cout << x+y;
}

// 第二个重载函数
int sum(int x, int y, int z)
{
    cout << x+y+z;
}

这里的 sum() 函数被称为重载,因为它有两个定义,一个接受两个参数,另一个接受三个参数,调用哪个 sum() 函数,取决于参数的数量。

int main()
{
    // 2个参数的sum()被调用
    sum (10, 20);  

    //3个参数的sum()被调用
    sum(10, 20, 30);  
}

以上实例输出结果:

30
60


函数重载:参数的不同数据类型

在这种类型的重载中,我们定义了两个或多个具有相同名称和相同数量参数的函数,但参数的类型不同,例如在下面这个示例中,我们有两个 sum() 函数,第一个传递两个整数参数,第二个传递两个浮点型参数。

// 第一个函数
int sum(int x, int y)
{
    cout<< x+y;
}

// 第二个重载函数
double sum(double x, double y)
{
    cout << x+y;
}

int main()
{
    sum (10,20);
    sum(10.5,20.5);
}

以上实例输出结果:

30
31.0


具有默认参数的函数

当我们在声明函数时直接定义了参数的默认值,它被称为默认参数,在这种情况下,即使我们调用该函数时没有传递任何参数,该函数也将会有默认值。

sum(int x, int y=0)
{
    cout << x+y;
}

在这里,我们在函数定义期间为 y 提供了一个默认值。


int main()
{
    sum(10);
    sum(10,0);
    sum(10,10);
}

以上实例输出结果:

10 10 20

前两个函数调用将产生完全相同的值。

对于第三个函数调用,y 将取 10 作为值,输出将变为 20。

通过设置默认参数,我们也重载了函数,默认参数还允许你在不同情况下使用相同的函数,就像函数重载一样。



使用默认参数的规则

  1. 有默认值的参数我们称之为默认参数,没有默认值的参数我们称之为非默认参数,在默认参数后不能有非默认参数,但反之可以,如示例:
sum (int x,int y);    
sum (int x,int y=0);  
sum (int x=0,int y);  // 这会报错
  1. 如果你有一个默认参数,那么后面的参数必须都是默认参数。
sum (int x,int y=0);
sum (int x,int y=0,int z);  // 报错
sum (int x,int y=10,int z=10);  // 正确
  1. 你可以为参数指定任何值的默认值,只要默认值与数据类型匹配就行。


带占位符参数的函数

函数中的参数在声明时可以没有变量名,它们被称为占位符参数,如下:

void sum (int, int);

此类参数也可以与默认参数一起使用。

void sum (int, int=0);