函数重载的实质:
用同样的名字再定义一次一个有着不同参数但有着同样用途的函数。
可以是参数个数不同,也可以是参数类型不同。
重载不是面向对象特征
函数的重载:
-对函数(方法)进行重载要谨慎
-重载函数越多,该程序就越不容易看懂
-注意区分重载和覆盖
-我们只能通过不同的参数重载,不能通过不同的返回值
-对函数重载的目的是为了方便对不同数据类型进行同样的处理
例一
#include<iostream>
void convertTemperature( double tempin, char typein);
void convertTemperature( int tempin, char typein);
int main()
{
double tempin;
char typein;
int tempinint;
std::cout<<"请以【xx.x C】或者【xx.x F】格式输入一个温度:";
std::cin >> tempin >> typein;
std::cin.ignore(100,'\n');
std::cout<<"\n";
convertTemperature( tempin,typein );
std::cout<<"请以【xx C】或者【xx F】格式输入一个温度:";
std::cin >> tempinint >> typein;
std::cin.ignore(100,'\n');
std::cout<<"\n";
convertTemperature( tempinint,typein );
return 0;
}
void convertTemperature( double tempin, char typein)
{
//华氏温度==摄氏温度*9.0/5.0+32
const unsigned short ADD_SUBTRACT = 32;
const double RADIO = 9.0/5.0;
double tempout;
char typeout;
switch( typein )
{
case 'c' :
case 'C' :
tempout=tempin * RADIO+ADD_SUBTRACT;
typein = 'C';
typeout = 'F';
break;
case 'F' :
case 'f' :
tempout = (tempin - ADD_SUBTRACT)/RADIO;
typein = 'F';
typeout = 'C';
break;
default:
typeout='E';
}
if (typeout!='E')
{
std::cout<<tempin <<typein <<"="<<tempout<<typeout<<"\n\n";
}
else
{
std::cout<<"输入格式错误!!!"<<"\n";
}
std::cout<<"请输入任意字符结束程序";
std::cin.get();
}
void convertTemperature( int tempin, char typein)
{
//华氏温度==摄氏温度*9.0/5.0+32
const unsigned short ADD_SUBTRACT = 32;
const double RADIO = 9.0/5.0;
int tempout;
char typeout;
switch( typein )
{
case 'c' :
case 'C' :
tempout=tempin * RADIO+ADD_SUBTRACT;
typein = 'C';
typeout = 'F';
break;
case 'F' :
case 'f' :
tempout = (tempin - ADD_SUBTRACT)/RADIO;
typein = 'F';
typeout = 'C';
break;
default:
typeout='E';
}
if (typeout!='E')
{
std::cout<<tempin <<typein <<"="<<tempout<<typeout<<"\n\n";
}
else
{
std::cout<<"输入格式错误!!!"<<"\n";
}
std::cout<<"请输入任意字符结束程序";
std::cin.get();
}
【作业】
利用函数重载的方法设计一个成宿,通过函数calc()进行计算并返回显示结果
-传入一个参数时,计算该参数的平方值
-传入两个参数时,计算两个参数的积
-传入三个参数时,计算三个参数的和
#include<iostream>
int calc( double a );
int calc( double a, double b);
int calc( double a, double b ,double c);
int main()
{
double x,y,z;
std::cin>>x;
calc( x );
std::cin>>y;
calc( x, y );
std::cin>>z;
calc(x,y,z);
std::cin.ignore(100,'\n');
std::cout<<"请输入任意字符结束程序"<<"\n";
std::cin.get();
return 0;
}
int calc( double a )
{
std::cout<<a<<" 的平方为: "<<a*a<<"\n";
return 0;
}
int calc( double a ,double b)
{
std::cout<<a<<","<<b<<" 的积为: "<<a*b<<"\n";
return 0;
}
int calc( double a,double b, double c )
{
std::cout<<a<<","<<b<<","<<c<<" 的和为: "<<a+b+c<<"\n";
return 0;
}
尚未解决的问题:
一:程序的健壮性差,输入不是数的话为自动退出程序
二:能不能根绝判断输入的数据个数来选择某一个函数执行???