关于函数重载

一.构成函数重载的条件如下:

1.函数名相同。

2.这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,即参数列表不同。

3.返回值类型不同不构成重载函数。

二.重载函数的匹配原则:

1、严格匹配,找到后就调用。

2、没有找到严格匹配的函数,但是可以通过隐式转化,找到适合的重载函数。

例:

1.参数类型不一样

void print(int a)

{

printf("void print(int a)\n");

}

void print(string a)

{

printf("void print(string a)\n");

}

2.参数个数不同(较1)

void print(int a ,string b);

3.参数顺序不同(较2)

void print(string a ,int b);

为了估计哪个重载函数最适合,需要依次按照下列规则来判断:

  • 精确匹配:参数匹配而不做转换,或者只是做微不足道的转换,如数组名到指针、函数名到指向函数的指针、T到const T;
  • 提升匹配:即整数提升(如bool 到 int、char到int、short 到int),float到double
  • 使用标准转换匹配:如int 到double、double到int、double到long double、Derived*到Base*、T*到void*、int到unsigned int;
  • 使用用户自定义匹配
  • 使用省略号匹配:类似printf中省略号参数

“同一作用域”也是在函数重载的定义中的一个限定,如果不在一个作用域,不能算是函数重载,如下面的代码:

void f(int);

void g()
{
        void f(double);
        f(1); //这里调用的是f(double),而不是f(int)
}
内层作用域的函数会隐藏外层的同名函数 同样的派生类的成员函数会隐藏基类的同名函数 。这很好理解,变量的访问也是如此,如一个函数体内要访问全局的同名变量要用“::”限定。

本文只是作粗略基本介绍,了解更多请参照大神http://www.cnblogs.com/skynet/archive/2010/09/05/1818636.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值