zoukankan      html  css  js  c++  java
  • C++函数重载

    1、函数重载的由来:
    在平时的编程过程中,一个函数可能就实现一个功能,多个功能就需要多个函数。但有时候多个功能之间很像,只是一些细节有差异,那么类似这样的功能能不能写成一个函数呢?例如,要求2个数中比较大的数,这两个数的类型有时候是int类型,有时候是float类型,那么我们按照之前的写法应该是这样封装函数:

    int max_int(int a, int b);
    float max_float(float a, float b);

    所以,用户在调用的时候就要根据不同的参数类型,调用不同名字的函数,如果要求两个int类型的数中的比较大的就要调用 max_int,如果要求两个float类型的数中的比较大的就要调用 max_float,能不能叫一个名字呢?让系统自己去适配到底调用哪个?答案是可以的。例如:

    int max_num(int a, int b);
    float max_num(float a, float b);

    实际上这就是函数的重载。
    C++允许同一函数名定义多个函数,这些函数的参数类型和个数可以不相同,而且至少要有一个不相同,如果都相同的话就会报重复定义的链接错误了。使一个函数名可以多用。

    2、函数重载的要求:
    重载函数的参数个数、参数类型、参数顺序 三者中必须至少有一种不同(不然会产生调用疑惑)。函数的返回值类型可以相同也可以不同。
    单纯返回值类型不同的两个同名函数不能构成函数重载,会报链接错误。

    举个例子:
    
    int max_num(int a, int b);
    bool max_num(int a, int b);
    float max_num(float a, float b);

    这样就不行,int max_num(int a, int b); 和 bool max_num(int a, int b); 不满足条件,只有返回值类型不同。这样会导致系统不知道调用哪一个。编译直接报错。

    例如:max_num(22,33);你知道调用的是bool类型的函数还是int类型的函数?

    穷则独善其身,达则兼济天下……
  • 相关阅读:
    mysql-centos7部署mysql5.7.20
    tips-history添加命令的执行时间
    Maven核心概述
    Java动态代理
    JDBC(3)-数据库事务
    JDBC(2)-操作BLOB类型字段和批量插入
    redis+mysql读写方案
    Redis与Memcache区别最全整理【摘自百度】
    redis+mysql有几种用法?【摘录知乎】
    js 拷贝到剪贴板
  • 原文地址:https://www.cnblogs.com/hmy-666/p/14413275.html
Copyright © 2011-2022 走看看