c++学习笔记

c++函数重载

2020-07-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)

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

上一篇 下一篇

猜你喜欢

热点阅读