C++ 中的函数重载

原文:https://www.studytonight.com/cpp/function-overloading.php

如果任何类有多个同名但不同参数的函数,那么它们就被称为重载。函数重载允许您对不同的函数使用相同的名称,以在同一个类中执行相同或不同的函数。

函数重载通常用于增强程序的可读性。如果您必须执行一个操作,但参数的数量或类型不同,那么您可以简单地重载该函数。


控制一个函数的不同方法

  1. 通过更改参数数量。
  2. 通过不同类型的争论。

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

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

// first definition
int sum (int x, int y)
{
    cout << x+y;
}

// second overloaded defintion
int sum(int x, int y, int z)
{
    cout << x+y+z;
}

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

int main()
{
    // sum() with 2 parameter will be called
    sum (10, 20);  

    //sum() with 3 parameter will be called
    sum(10, 20, 30);  
}

30 60


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

在这种类型的重载中,我们定义了两个或多个具有相同名称和相同数量参数的函数,但是参数的类型是不同的。例如,在这个程序中,我们有两个 sum()函数,第一个得到两个整数参数,第二个得到两个双参数。

// first definition
int sum(int x, int y)
{
    cout<< x+y;
}

// second overloaded defintion
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);  // This is Incorrect
    
  2. 如果你默认一个参数,那么你必须默认其后的所有参数。

     sum (int x,int y=0);
    sum (int x,int y=0,int z);  // This is incorrect
    sum (int x,int y=10,int z=10);  // Correct
    
  3. 您可以给任何值一个默认值作为参数,与它的数据类型兼容。


带有占位符参数的函数

当函数中的参数在没有任何标识符的情况下声明时,它们被称为占位符参数。

void sum (int, int);

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

void sum (int, int=0);