学个C++吧之函数重载

函数重载定义: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>
此函数可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值