C++入门--函数重载

举例:实现比较两个数的大小

#include <iostream>
#include <string>
using namespace std;

#define GETMAX(a, b) ((a) > (b)) ? (a) : (b);
inline int getMax(int a, int b) { return ((a) > (b)) ? (a) : (b); }

int main(int argc, char const* argv[]) {
    int n = getMax(1, 2);
    int n1 = GETMAX(1, 2);
    char* p = nullptr;
    char* q = nullptr;
    char* m = GETMAX(p, q);

    return 0;
}

使用宏,虽然可以实现忽略传入的数据类型,但是不安全

使用(内联)函数,虽然更安全,但是由于有类型检查而扩展性不好

在C++中允许出现同名的函数--函数重载

条件(函数要素:函数名、函数参数、函数返回值、函数的调用约定):

1.函数名必须相同

2.函数参数个数不同,类型不同,类型顺序不同

3.函数的返回值,调用约定不做考虑

4.作用域相同

 

函数重载的调用规则

1.根据函数名找对应的函数,作为候选函数

  1.1如果候选函数个数为0,则报为定义错误(找不到标识符)

2.候选函数个数>0,从候选中找匹配的函数(完全匹配,可以转换的匹配【char <-->int】【float<-->double】【float<-->int】)

  2.1如果匹配的函数个数 == 0,则错误(隐式转换失败)

  2.2如果匹配个数>0,找匹配最佳

3.最佳匹配个数 = 1,就调用该函数

   最佳匹配个数 > 1,就会报二义性

 

posted @ 2020-10-14 16:21  朱果果  阅读(189)  评论(0编辑  收藏  举报