118 C++中函数的重载

在传统的C语言中,函数名必须是唯一的,也就是说在同一作用域中,不允许出现同名的函数。

例如:   要求编写求整数、浮点数和双精度数的平方数的函数。  

在传统的C语言中:  

Isquare(int i);    //求整数的平方数  

Fsquare(float f); //求浮点数的平方数

Dsquare(double d);//求双精度数的平方数

在C++中,允许两个或者两个以上的函数共用一个函数名。

例如:   square(int i);    //求整数的平方数  

square(float f); //求浮点数的平方数

square(double d);//求双精度数的平方数

函数重载:当两个或者两个以上的函数共用一个函数名时,称为函数重载。
被重载的函数称为重载函数。
重载函数应在参数个数或参数类型上有所不同,或者二者兼而有之

举例:
 

#include<iostream>
using namespace std;
int square(int i) { return i * i; }
float square(float f) { return f * f; }
double square(double d) { return d * d; }
int main()
{
    int i = 12;
    float f = 3.4;
    double d = 5.67;
    cout << i << "*" << i << "=" << square(i) << endl;
    cout << f << "*" << f << "=" << square(f) << endl;
    cout << d << "*" << d << "=" << square(d) << endl;
    return 0;
}
运行结果:
12*12=144
3.4*3.4=11.56
5.67*5.67=32.1489
#include<iostream>
using namespace std;//参数个数不同的函数重载
int add(int x, int y) { return x + y; }
int add(int x, int y, int z) { return x + y + z; }
int main()
{
	int a = 3, b = 4, c = 5;
	cout << a << "+" << b << "=" << add(a, b) << endl;
	cout << a << "+" << b <<"+"<<c<< "=" << add(a, b,c) << endl;
	return 0;
}
运行结果:
3+4=7
3+4+5=12

说明:

(1)若两个函数的参数个数和类型都相同,而只有返回值类型不同,则不允许重载。

例如:     int mul(int x,int y);     double mul(int x,int y);

虽然这两个函数的返回值类型不同,但是参数个数和类型完全相同,编译程序将无法区分这两个函数。        

   overloaded function differs only by return type from 'int __cdecl mul(int,int)'

(2) 函数的重载与带默认值的函数一起使用时,有可能引起二义性,例如:

void Drawcircle(int r=0, int x=0, int y=0);

void Drawcircle(int r);    

当执行以下的函数调用时:   Drawcircle(20);   时,编译无法确定使用哪一个函数。    

‘Drawcircle’ : ambiguous call to overloaded function        

void Drawcircle(int r, int x, int y)//不带默认值  

  {     cin>>r>>x>>y;cout<<r<<x<<y;}    

void Drawcircle(int r)  

  {     cout<<r;} 

(3) 在函数调用时,如果给出的实参和形参类型不相符,C++的编译器会自动地做类型转换工作。如果转换成功,则程序继续执行。

但是,在这种情况下,有可能产生不可识别的错误。

例如,有两个函数的原型如下:      

void f_a(int x);  

  void f_a(long x);    

如果我们用下面的数据去调用,就会出现不可识别的错误:      

 int c=f_a(5.56);

编译器无法确定将5.56转换成int还是long类型

更多内容欢迎关注微信订阅号:phpstory

猜你喜欢

转载自blog.csdn.net/phpstory/article/details/81869816
118