在前面的程序中用到了插入运算符“<<”和提取运算符“>>”。这两个运算符是c和c++位运算中的左移运算符和右移运算符,现在c++又把它作为输入输出运算符。即允许一个运算符用于不同场合,有不同的含义,这就叫做运算符的“重载”(overloding),即重新赋予它新的含义,其实就是“一物多用”。
在c++中,函数也可以重载。用c语言编程时,有时会发现几个不同名的函数实现的是同一类的操作。例如要求从3个数中找出其中的最大者,而这三个数的关系事先不确定,可以是整型、实型或长整型。在写c语言程序时,需要分别设计出3个函数,其原型为
int max1(int a ,int b,int c)(求3个整数中的最大者)
int max2(float a,float b,float c) (求3个实数中的最大者)
int max3(long a,long b,long c) (求3个长整型中的最大者)
C语言规定在同一作用域(例如同一个文件模块中)不能有同名的函数,因此3个函数的名字不相同。
c++允许在同一作用域中用同意函数名定义多个函数,这些函数的参数个数和参数类型不相同,这些同名的函数用来实现不同的功能。这就是函数的重载,即一个函数多次使用。
对上面的问题可以编写如下的c++程序
例子:求三个数中最大的数(分别考虑整数、实数、长整型的情况)
#include<iostream>
using namespace std;
int max(int a,int b,int c) //求3个整数中的最大者
{ if(b>a)a=b;
if(c>a)a=c;
return a;
}
float max(float a,float b,float c) //求3个实数中的最大者
{if(b>a)a=b;
if(c>a)a=c;
return a;
}
long max(long a,long b,long c) //求3个长整数中的最大者
{if(b>a)a=b;
if(c>a)a=c;
retrun a;
}
int main()
{int a,b,c;float d,e,f;long g,h,i;
cin>>a>>b>>c;
cin>>d>>e>>f;
cin>>g>>h>>i;
int m;
m=max(a,b,c); cout<<"max_i="<<m<<endl; float n; n=max(d,e,f); cout<<"max_f="<<n<<endl; long int p p=max(a,b,c); cout<<"max_1"<<p<<endl; return 0; } 运行情况略 main函数3次调用max函数,每次实参的类型不同。系统会根据实参的类型找到与之匹配的函数,然后调用该函数。