1.介绍
函数重载:名字相同,参数列表不同(参数个数、参数类型)
简化编程工作、提高代码可读性。
方便对不同数据类型进行同样的处理。
#include <iostream>
using namespace std;
void converTemperature(double tempIn,char tupeIn);
void converTemperature(int tempIn,char tupeIn);
int main()
{
double tempIn; //输入的温度
int tempInInt;
char typeIn; //输入的类型
cout<<"请输入一个温度,以xx.XC或xx.xF这样的格式:";
cin>>tempIn>>typeIn;
cin.ignore(100,'\n');//避免回车的影响
cout<<"\n";
converTemperature(tempIn,typeIn);
cout<<"请输入一个温度,以xx C或xx F这样的格式:";
cin>>tempInInt>>typeIn;
cin.ignore(100,'\n');//避免回车的影响
cout<<"\n";
converTemperature(tempInInt,typeIn);
return 0;
}
void converTemperature(double tempIn,char typeIn)
{
//华氏温度==摄氏温度*9.0/5.0+32
const unsigned short ADD_SUBTRACT=32;
const double RATIO=9.0/5.0;
float tempOut;
char typeOut;
switch(typeIn){
case 'C':
case 'c':
tempOut=tempIn*RATIO+ADD_SUBTRACT;
typeOut='F';
typeIn='C';
break;
case 'F':
case 'f':
tempOut=(tempIn-ADD_SUBTRACT)/RATIO;
typeOut='C';
typeIn='F';
break;
deafult:
typeOut='E';
break;
}
if(typeOut!='E'){
cout<<tempIn<<typeIn<<"="<<tempOut<<typeOut<<"\n\n";
}
else{
cout<<"输入错误!"<<"\n\n";
}
cout<<"请输入任何字符结束程序!"<<"\n\n"; //上面已经消除了回车的影响
cin.get();
}
void converTemperature(int tempIn,char typeIn)
{
//华氏温度==摄氏温度*9.0/5.0+32
const unsigned short ADD_SUBTRACT=32;
const double RATIO=9.0/5.0;
int tempOut;
char typeOut;
switch(typeIn){
case 'C':
case 'c':
tempOut=tempIn*RATIO+ADD_SUBTRACT;
typeOut='F';
typeIn='C';
break;
case 'F':
case 'f':
tempOut=(tempIn-ADD_SUBTRACT)/RATIO;
typeOut='C';
typeIn='F';
break;
deafult:
typeOut='E';
break;
}
if(typeOut!='E'){
cout<<tempIn<<typeIn<<"="<<tempOut<<typeOut<<"\n\n";
}
else{
cout<<"输入错误!"<<"\n\n";
}
cout<<"请输入任何字符结束程序!"<<"\n\n"; //上面已经消除了回车的影响
cin.get();
}
注意:区分重载和覆盖(参数相同,函数名相同,返回值相同)
只能通过不同参数进行重载,不能通过不同的返回值、参数顺序进行重载。
2.练习
1.为什么不能通过返回值不同来重载函数(方法)?
- 当编译器遇到一个函数调用时,它是根据函数名和参数列表来确定要调用的具体函数。如果存在两个函数只有返回值不同,而参数列表相同,编译器无法判断调用者想要调用哪个函数,就会产生二义性错误。例如:
int add(int a, int b) { return a + b; } double add(int a, int b) { return (double)(a + b); } int main() { int x = 3, y = 5; add(x, y); // 编译器无法确定调用哪个add函数 return 0; }
2.要求程序通过利用重载函数的方法设计一个程序。
该程序通过函数"calc()“进行计,并返回显示结果。
- 当传入一个参数时,计算该参数的平方值;
- 当传入两个参数时,计算两个参数的积;
- 当传入三个参数时,计算三个参数的和。
#include <iostream>
using namespace std;
//函数要先定义再使用
int calc(int num)
{
return num*num;
}
int calc(int num,int num2)
{
return num*num2;
}
int calc(int num,int num2,int num3)
{
return num+num2+num3;
}
int main()
{
//传入一个参数,计算平方值
cout<<calc(5)<<endl;
//传入两个参数,计算乘积
cout<<calc(5,6)<<endl;
//传入三个参数,计算和
cout<<calc(5,6,7)<<endl;
return 0;
}
覆盖与重载:覆盖 和 重载-优快云博客
未完待续。。。