关于函数重载

来源:互联网 发布:plc用c语言编程 编辑:程序博客网 时间:2024/06/11 20:37

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

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


原创粉丝点击