函数的重载

函数的重载

一. 重载的概念

  1. 同一个标识符在不同的上下文有不同的意义

    如:

    play chess、play the piano、 play bascketball 、play the guitar 、play the ukulele

二. swap函数的局限

​ 上面我们用引用定义行参,也可以实现swap函数,但是还是有可以改进的地方,上述的swap()只能交换两个整数类型的变量,如何实现使用同一个函数名,但是可以实现不同数据类型两个变量的交换

三. 函数重载(function overload)

  1. 用同一个函数名定义不同的函数

    #include<iostream>
    using namespace std;
    
    void swap(int& a, int& b)
    {
       int tmp = a;
       a = b;
       b = tmp;
    }
    
    
    void swap(float& a, float& b)
    {
       float tmp = a;
       a = b;
       b = tmp;
    }
    
    void swap(char& a, char& b)
    {
     int tmp = a;
    	a = b;
     b = tmp;
    }
    
    int main(int argc, const char *argv[])
    {
     int ai = 10;
     int bi = 20;
     swap(ai, bi);
     cout << "ai = " << ai << " bi = " << bi << endl;
    
      float af = 12.34;
      float bf = 56.78;
      swap(af, bf);
     cout << "af = " << af << " bf = " << bf  << endl;
    
      char ac = 'a';
    	char bc = 'b';
      swap(ac, bc);
     cout << "ac = " << ac << " bc = " << bc << endl;
    
    
         return 0;
    }
    
  2. 当函数名和不同的参数搭配时函数的含义不同

  3. 函数重载至少满足下面一个条件

  4. 参数个数不同、数类型不同、参数顺序不同

    #include<string>
    #include<iostream>
    using namespace std;
    
    int fun(int a)
    {
      return a;
    }
    
    int fun(int a, int b)
    {
       return a+b;
    }
    
    int fun(string s)
    {
        return s.length();
    }
    
    int main(int argc, const char *argv[])
    {
        int a = 10;
        int b = 20;
        string str = "hello";
        cout << "fun(a)" << fun(a) << endl;
        cout << "fun(a+b)" << fun(a+b) << endl;
        cout << "fun(str)" << fun(str) << endl;
        return 0;
    }
    
    
    $ ./a.out 
    fun(a)10
    fun(a+b)30
    fun(str)5
    

四. C++中的函数重载

  1. 函数重载的本质为相互独立的不同函数
  2. C++中通过函数名和函数参数确定函数调用
  3. 无法直接通过函数名得到重载函数的入口地址
  4. 函数重载必然发生在同一个作用域中

五. 重载的意义

  1. 通过函数名对函数功能进行提示
  2. 通过参数列表对函数函数用法进行提示
  3. 扩展系统中已经存在的函数功能

六. 重载的实现原理

​ 通过查看反汇编代码:objdump -D a.out > a.dis
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值