c++函数重载

来源:互联网 发布:如何打开23端口 编辑:程序博客网 时间:2024/05/18 01:23

               重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。

              重载函数有点像是多种含义的操作符(上篇操作符重载函数重载中的一种),例如: 

     cout<<a;
     a<<2;
这两者的同位<<操作符,一个为移位,另一个却为输出。函数重载的关键是函数的参数列表,也称为函数的特征标。两个函数的特征标相同,那么两个函数的参数个数与参数类型必须保持严格的一致。例如:可以定义如下一组函数:

void test(int a,int b);  //avoid test(double a,char *b);   //bvoid test(long a,int b);    //c
test(1,3)和a匹配,test(1.2,"q")则和b匹配。

注意:

A. 如果有test()存在,那么,它和谁匹配呢?它不与任何原型匹配!切记,没有匹配的原型并不会自动停止使用其中的某个函数,因为c++将尝试使用标准类型转换强制进行匹配。如果b是test的唯一原型,那么tets(1.2,"q")其中的double类型便会强制转化为int类型。但是如果有多种类似于b原型的重载函数,比如:

void test(float a,char *b);
当test(1.2,"q")尝试去强制进行匹配时,c++就会陷入两难,不知道将int类型转化为float还是转化为double,所以c++将拒绝调用这种函数,并报错。

B.编译器检查时,将把类型引用于类型本身视作同一个特征标。匹配函数并不区分const和非const变量。

C.是特征标使得可以对函数进行重载,而不是函数类型例如:

int test(int a,int b);  void test(int a,int b);//error//返回类型可以不同,但特征标也必须不同。int test(int a,int b);  void test(int a,double b);//right  
D.虽然函数的重载很吸引人,但也不要滥用,只有函数基本上执行相同的任务,但任务的数据不同时,才应用函数的重载。

原创粉丝点击