函数重载定义:C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个函数完成不同的功能。 这就是重载函数。 重载函数常用来实现功能类似而所处理的数据类型不同的问题。 不能只有函数返回值类型不同。
看一下代码增加印象
#include <iostream>
float calc(float sqrt);
float calc(float product1,float product2);
float calc(float sum1,float sum2,float sum3);
float calc(float sqrt)
{
return sqrt*sqrt;
}
float calc(float product1,float product2)
{
return product1*product2;
}
float calc(float sum1,float sum2,float sum3)
{
return sum1+sum2+sum3;
}
int main()
{
char type;
float sqrt,product1,product2,sum1,sum2,sum3;
std::cout<<"请选择以下三种模式";
std::cin>>type;
switch(type)
{
case 'a':
case 'A':
std::cout<<'\n'<<"A:平方计算,请输入一个值:"<<std::endl;
std::cin>>sqrt;
std::cout<<sqrt<<"的平方为:"<<calc(sqrt)<<std::endl;
break;
case 'b':
case 'B':
std::cout<<'\n'<<"B:乘积计算,请输入两个值:"<<std::endl;
std::cin>>product1>>product2;
std::cout<<product1<<'*'<<product2<<"="<<calc(product1,product2)<<std::endl;
break;
case 'c':
case 'C':
std::cout<<'\n'<<"C:加法计算,请输入三个值:"<<std::endl;
std::cin>>sum1>>sum2>>sum3;
std::cout<<sum1<<'+'<<sum2<<'+'<<sum3<<"="<<calc(sum1,sum2,sum3)<<std::endl;
break;
}
std::cout<<"请输入任意键结束"<<std::endl;
std::cin.ignore(100,'\n');
std::cin.get();
return 0;
}
cin可能遇到的情况:
1、cin输入类型不匹配的情况
#include<iostream>
using namespace std;
int main()
{
int a;
cout<<"输入一个字母:"<<endl;
cin>>a; //int型变量中放了char型数据,failbit置1
cout<<"cin.fail()="<<cin.fail()<<endl; //输出1
//cin.clear();
//cin.sync();
cout<<"输入一个数字:"<<endl; //由于failbit值为1,输入流不能正常工作
cin>>a; //故此处的输入无效,键盘不等待输入。
cout<<a<<endl; //直接输出不确定值。
由于a变量是个int型,我们输入了字符型。cin在接收键盘的缓存时由于接收的类型与变量的类型不符,它会返回一个错误键值放到缓存中,然后return。所以等到下次cin时,缓存中存放的是刚才返回的错误键值,依旧类型不符,造成错误。
解决办法:在cin>>之前加上cin.clear();用于清除错误标志位failbit
之后再加上cin.sync();用于清除缓存。
2.cin遇到空格,换行,tab会停止接收, 并清除缓冲区的内容。
这时候我们可以用cin.getline
cin.getline函数会一次读取多个字符 (包括空白字符)。 它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。 若不指定结束符,则默认结束符为换行符,此函数并不保留结束符,它通过结束符确定结束,但不保存结束符,它用空字符来替换结束符。
比如cin,getline(sentence,20)
getline 函数使用两个用逗号分隔的参数。第一个参数是要存储字符串的数组的名称。第二个参数是数组的大小。当 cin.getline 语句执行时,cin 读取的字符数将比该数字少一个,为 null 终止符留出空间。
3.getline(cin, inputLine);
其中 cin 是正在读取的输入流,而 inputLine 是接收输入字符串的 string 变量的名称.
头文件为< string>
此函数可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中。