C++ 函数的重载 详解

在有的情境下我们需要实现几个功能相似的函数,可能只有细节上有区别。比如求两个数的和,这两个数有多重类型,可能是int,float,double,char,bool等。如果在C语言中我们往往需要设计多个不同名称的函数。例如:

int Add1(int a, int b);       //求两个int类型的数之和
float Add2(float a, float b); //求两个float类型的数之和
char  Add3(char a, char b);   //求两个char类型的数之和

但在C++中,这完全没有必要。C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading)。借助重载,一个函数名可以有多种用途。

函数重载的前提:必须在相同的作用域

函数重载的条件:名字必须相同、参数列表一定不同(个数、类型、类型次序),返回值类型是否相同没有关系

函数的重载的规则:

  • 函数名称必须相同。
  • 参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。
  • 函数的返回类型可以相同也可以不相同。
  • 仅仅返回类型不同不足以成为函数的重载。

【示例】借助函数重载交换不同类型的变量的值:

#include <iostream>
using namespace std;
//交换 int 变量的值
void Swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
//交换 float 变量的值
void Swap(float *a, float *b)
{
    float temp = *a;
    *a = *b;
    *b = temp;
}
//交换 char 变量的值
void Swap(char *a, char *b)
{
    char temp = *a;
    *a = *b;
    *b = temp;
}
//交换 bool 变量的值
void Swap(bool *a, bool *b)
{
    char temp = *a;
    *a = *b;
    *b = temp;
}
int main()
{
//交换 int 变量的值
    int n1 = 100, n2 = 200;
    Swap(&n1, &n2);
    cout << n1 << ", " << n2 << endl;
//交换 float 变量的值
    float f1 = 12.5, f2 = 56.93;
    Swap(&f1, &f2);
    cout << f1< < ", " << f2 << endl;
//交换 char 变量的值
    char c1 = 'A', c2 = 'B';
    Swap(&c1, &c2);
    cout << c1 << ", " << c2 << endl;
//交换 bool 变量的值
    bool b1 = false, b2 = true;
    Swap(&b1, &b2);
    cout << b1 << ", " << b2 << endl;
    return 0;
}

C++ 是如何做到函数重载的,为什么C语言不可以

函数在编译的时候会对函数名重新修饰,C语言的名字修饰规则非常简单,只是在函数名字前面添加了下划线。比如,对于以下代码,在最后链接时就会出错

而函数在C++编译时名称修饰比较复杂,语言不好描述,可以看以下图片。

思考:

void  fun(int a = 10){}

void  fun(int a){}

会形成函数重载吗???????

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值