最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

那些年C++ 函数之函数重载

XAMPP相关 admin 87浏览 0评论

第十六章:C++ 函数重载

在此篇教程中,我们将通过示例程序来了解 C++ 中的函数重载

在 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 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 << "Absolute value of -5 = " << absolute(-5) << endl;

    // 带有浮点型参数的调用函数
    cout << "Absolute value of 5.5 = " << absolute(5.5f) << endl;
    return 0;
}

输出:

Absolute value of -5 = 5
Absolute value of 5.5 = 5.5

dra00093

重载函数的工作过程图

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


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

#include <iostream>
using namespace std;

// 带有2个参数的函数
void display(int var1, double var2) {
    cout << "Integer number: " << var1;
    cout << " and double number: " << var2 << endl;
}

// 具有双类型单参数的函数
void display(double var) {
    cout << "Double number: " << var << endl;
}

// int类型单参数函数
void display(int var) {
    cout << "Integer number: " << var << endl;
}

int main() {

    int a = 5;
    double b = 5.5;

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

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

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

    return 0;
}

输出:

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

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

dra000093

display()函数的重载工作过程

所有这些函数的返回类型都是相同的,但函数重载后则返回相应的结果。


Note:在 C++ 中,许多标准库函数被重载。例如,sqrt() 函数可以将 doublefloatint 等作为参数传入并返回相应的结果,故而 sqrt() 函数在 C++ 中被重载了。

 

 

程序算法实验室 zhangJA-Lab

转载请注明:XAMPP中文组官网 » 那些年C++ 函数之函数重载