C++ | C++函数的重载

C++ | C++函数的重载

C++函数的重载

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

实例1:

/*******************************************************************
 *   > File Name: classOverload.cpp
 *   > Create Time: 2021年09月13日 14:58:36
 ******************************************************************/
#include <iostream>
using namespace std;

void Swap(int a, int b)
{
    cout << "a = " << a << ", b = " << b << endl;
    int c;
    c = a;
    a = b;
    b = c;
    cout << "a = " << a << ", b = " << b << endl;
}

void Swap(char a, char b)
{
    cout << "a = " << a << ", b = " << b << endl;
    char c;
    c = a;
    a = b;
    b = c;
    cout << "a = " << a << ", b = " << b << endl;    
}

void Swap(double a, double b)
{
    cout << "a = " << a << ", b = " << b << endl;
    double c;
    c = a;
    a = b;
    b = c;
    cout << "a = " << a << ", b = " << b << endl;    
}

void Swap(bool a, bool b)
{
    cout << "a = " << a << ", b = " << b << endl;
    bool c;
    c = a;
    a = b;
    b = c;
    cout << "a = " << a << ", b = " << b << endl;    
}

int main(void)
{
    Swap(100, 1000);

    Swap('a', 'b');

    Swap(12.5, 33.5);

    Swap(true, false);

    return 0;
}

编译、运行:

PS E:\fly-prj\cplusplus\day11> make 
g++ -o classOverload classOverload.cpp -g -Wall
PS E:\fly-prj\cplusplus\day11> .\classOverload.exe
a = 100, b = 1000
a = 1000, b = 100
a = a, b = b
a = b, b = a
a = 12.5, b = 33.5
a = 33.5, b = 12.5
a = 1, b = 0
a = 0, b = 1

注意,参数列表不同包括参数的个数不同、类型不同或顺序不同,仅仅参数名称不同是不可以的。函数返回值也不能作为重载的依据。

函数的重载的规则:

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

C++ 是如何做到函数重载的

C++代码在编译时会根据参数列表对函数进行重命名,例如void Swap(int a, int b)会被重命名为_Swap_int_intvoid Swap(float x, float y)会被重命名为_Swap_float_float

当发生函数调用时,编译器会根据传入的实参去逐个匹配,以选择对应的函数,如果匹配失败,编译器就会报错,这叫做重载决议(Overload Resolution)。

不同的编译器有不同的重命名方式,这里仅仅举例说明,实际情况可能并非如此。

从这个角度讲,函数重载仅仅是语法层面的,本质上它们还是不同的函数,占用不同的内存,入口地址也不一样。

来源

C++ | C++ 重载运算符和重载函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值