C++里的函数重载(overloading)很强大
所谓重载函数的实质就是用同样的名字再定义一个有着不同参数但有着同样用途的函数。(人格分裂、多重身份。。。。)
Day2例题改
#include <iostream>
void convertTemperature(double tempIn, char typeIn);
int main()
{
double tempIn;
char typeIn;
std::cout << "请以【XX.X C】或者【XX.X F】输入一个温度:";
std::cin >> tempIn >> typeIn;
std::cin.ignore(100,'\n');
std::cout << "\n";
convertTemperature(tempIn, typeIn);
return 0;
}
void convertTemperature(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;
default:
typeOut = 'E';
break;
}
if ( typeOut != 'E')
{
std::cout << tempIn << typeIn
<< " = " << tempOut << typeOut << "\n\n";
}
else
{
std::cout <<"输入错误!" << "\n\n";
}
std::cout <<"输入任何字符结束程序!";
std::cin.get();
}
再改
输入一个双精度,再输入一个整形,程序还是有点乱,以后改。
#include <iostream>
void convertTemperature(double tempIn, char typeIn);
void convertTemperature1(int tempIn, char typeIn);
int main()
{
double tempIn;
char typeIn;
std::cout << "请以【XX.X C】或者【XX.X F】输入一个温度:";
std::cin >> tempIn >> typeIn;
std::cin.ignore(100,'\n');
std::cout << "\n";
convertTemperature(tempIn, typeIn);
std::cin.ignore(100,'\n');
std::cout << "请以【XX.X C】或者【XX.X F】输入一个温度:";
std::cin >> tempIn >> typeIn;
std::cin.ignore(100,'\n');
std::cout << "\n";
convertTemperature1(tempIn, typeIn);
return 0;
}
void convertTemperature(double tempIn, char typeIn)
{
//华氏温度 == 摄氏温度*9.0/5.0+32
const unsigned short ADD_SUBTRACT = 32;
const double RATIO = 9.0/5.0;
double 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;
default:
typeOut = 'E';
break;
}
if ( typeOut != 'E')
{
std::cout << tempIn << typeIn
<< " = " << tempOut << typeOut << "\n\n";
}
else
{
std::cout <<"输入错误!" << "\n\n";
}
std::cout <<"输入任何字符结束程序!";
std::cin.get();
}
void convertTemperature1(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;
default:
typeOut = 'E';
break;
}
if ( typeOut != 'E')
{
std::cout << tempIn << typeIn
<< " = " << tempOut << typeOut << "\n\n";
}
else
{
std::cout <<"输入错误!" << "\n\n";
}
std::cout <<"输入任何字符结束程序!";
std::cin.get();
}
函数的重载:对函数进行重载,事实上可以简化编程工作和提高代码可读性。
注意点
1、对函数(方法)进行重载一定要谨慎,不要“无的放矢”或者“乱点鸳鸯”
2、要知道重载函数越多,该程序就越不容易看懂;
3、注意区分重载和覆盖。
4、我们只能够通过不同参数进行重载,但不能通过不同的返回值(尽管后这也是一种区别)
5、对函数进行重载的目的是为了方便对不同数据类型进行同样的处理
Question:为什么不通过返回值不同来重载函数(方法)呢?
利用重载函数的方法设计一个程序,该程序通过函数“calc()”进行计算并返回显示结果。
当传入一个参数时,计算该参数的平方。
当传入两个参数时,计算两个参数的积。
当传入三个参数时,计算三个参数的和。