c++函数重载

作者: 檀香静雪 | 来源:发表于2020-07-12 18:12 被阅读0次

    引入

    假设如下函数来比较两个int型数据的大小

    int max(int a, int b) {
        return a > b ? a : b;
    }
    


    当我们需要再增加一个比较两个doublechar类型的数据时,我们的函数名会变得臃肿,如下所示:

    int max_int(int a, int b) {
        return a > b ? a : b;
    }
    int max_double(double a, double b) {
        return a > b ? a : b;
    }
    int max_char(char a, char b) {
        return a > b ? a : b;
    }
    

    当我们需要比较更多类型数据的大小时,我们的max_xxx函数会变得越来越多。在进行调用时会越来越麻烦。

    函数重载定义

    函数重载指的是一个或多个函数,名字相同,然而参数个数以及参数类型不同,我们就称之为函数重载。

    将上面的代码改写为如下形势:

    int max(int a, int b) {
        return a > b ? a : b;
    }
    int max(double a, double b) {
        return a > b ? a : b;
    }
    int max(char a, char b) {
        return a > b ? a : b;
    }
    

    这是我们在调用函数时就不需要用函数名去区分该调用哪个函数,此时程序会根据我们的参数个数以及参数类型去选择调用的函数。

    如下函数调用代码所示:

    #include<iostream>
    using namespace std;
    int max(int a, int b) {// 1
        return a > b ? a : b;
    }
    int max(double a, double b) {// 2
        return a > b ? a : b;
    }
    int max(char a, char b) {// 3
        return a > b ? a : b;
    }
    int main() {
        max(2, 3);//调用 1
        max('a', 'b');//调用 3
        max(2.3, 3.2);//调用 2
        return 0;
    }
    

    如上程序,在执行max(2, 3);时,参数为两个int类型的,所以自动匹配到调用第1个max函数。其他两次调用类似。

    函数重载使得函数的命名变得简单,调用过程也变得简洁。

    注意事项

    考察如下函数调用语句:

    max(2, 3.1);
    

    当我们进行上述的函数调用时,就会产生二义性。

    此时编译器不知道是将3.1转换为int去调用max(int a, int b) ,还是将2转化为double去调用 max(double a, double b)

    因此,在调用重载函数时要注意去避免产生二义性。

    相关文章

      网友评论

        本文标题:c++函数重载

        本文链接:https://www.haomeiwen.com/subject/tqhncktx.html