C++重载

1、什么是函数重载?
    在同一个作用域中(前提),函数名相同,参数表不相同的函数(条件);构成重载关系。
    重载与函数的返回赖幸和参数名无关,只与参数的个数、类型和顺序有关。
2、重载解析
1)根据调用函数时所提供的实参,按照类型匹配的原则,找到相应的重载版本的过程。类型无法完全匹配时,char的整型提升为int;解析的时候是在类型安全的前提下,优先选择工作量小的进行的。
2)重载原理:c++中的重载是通过换名来实现的,那么什么是换名?C++编译器在编译c++函数时,会根据该函数的参数表对其名称进行替换,因此同一个作用域中参数表不同的同名函数,在编译成二进制目标模块以后,起函数名是不同的。以下是Ubuntu下查看函数的换名:

#include<iostream>
using namespace std;
char fun(short h,int i)
{
    cout << "fun(short,int)" << endl;
    return 'a';
}
void fun(float x,double y)
{
    cout << "3fun(float,double)" << endl;
    return'b';
}

[yang]g++ -c test.cpp
[yang]nm test.o
00000014 T _Z3funfd //换名之后 函数1 f-float d-int
00000000 T _Z3funsi //换名之后 函数2 s-short i-double
         U __gxx_personality_v0

3)从c->c++的函数调用的两种解决方式:
a、在c中用的函数用c++的换名调用
b、在c++中函数前些 externa “C” char fun(char a,int i){}
让编译器按c的方式进行编译,不换名;
extern “C”{
    函数1,
    函数2,
    ...
}
注:被extern "C" 修饰的函数就不能实现函数重载。
3、函数缺省参数
1、在声明函数时可以为函数部分或者全部采用缺省值,调用函数时,如果某些参数没有提供实参,那么该参数可以取缺省值。
2、如果函数的某个参数带有缺省值,那么该参数后面的所有参数都必须带有缺省值。
3、避免缺省参数的重载产生歧义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值