c++函数重载和默认参数

写在开头:函数重载和默认参数不能同时使用

函数重载 是C++语言面向对象的特点–多态的一种表现形式 (又称为静多态)。

重载的规则:
1、函数名相同。
2、参数个数不同,参数类型不同,参数顺序不同,均可构成重载。
3、仅返回值类型不同则不可以构成重载。

void func(int a); //ok
void func(char a); //ok
void func(int a,char b);//ok
void func(char a,int b);//ok
char func(int a);//error

匹配原则:

1、严格匹配,找到则调用。
2、通过隐式类型转换寻求一个匹配,找到则调用。
注:C++允许 int 到 long 和 double ;double 到 int 和 float 的隐式类型转换。则遇到同时存在的隐式转 换,会产生二义性错误。

例:

void func(int a);
void func(float a);

则调用重载函数是传入double型参数就会产生二义性。 func(1.0);

函数重载的底层实现是通过 name mangling(倾轧)技术来实现,即改名函数名,区分参数不同的的同名函数。对于上边的函数,编译器在编译时(所以称为静多态)将以上函数的名字可能改为(仅为举例说明,实际以编译器为准):func_i(int a) ; func_i_c(int a,char b)等。

补充:
const修饰函数也可构成重载。(const修饰符具体见另一篇)

默认参数是C++提供的另一种机制,为了避免多次调用一个函数同一实参时的重复书写。

我们在写函数时,给函数的参数带上默认值。但注意:默认值只能在函数声明时设置不能在函数定义时设置。

默认的规则:
1、默认的顺序是从右向左依次设置,不能跳跃。
2、函数声明和函数定义在一体时,默认参数在定义(其实就是声明)处。声明在前定义在后,默认在声明
3、一个函数,不能既作重载,又作默认参数声明。因为当你少些一个参数事,系统无法判别是重载还是默认参数。

例:

void print(int a){};
void print(int a,int b = 100){};
int  main()
{
    print(10);  
    return 0;
}

error:call of overloaded ‘print(int a)’ is embiguous print(10);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值