c++重载函数程序
题目:利用重载函数设计程序,1)传入一个参数时,计算平方。2)传入两个参数时,计算两数乘积。3)传入三个参数时,计算三数的和。顺便吐槽一下小甲鱼老师c++的视频是坑王驾到,管挖坑不管埋,刚学C++的我对留下的课后作业一头雾水。又找不到课后作业的答案。
#include <iostream.h>
double calc(double a);
double calc(double a,double b);
double calc(double a,double b,double c);
int main()
{
double a,b,c;
cout<<"please input numbers:"<<"\n press enter to end of input";
while(cin!=' ')
{
cin>>a>>b>>c; //非空就把数赋值给a,b,c
}
cin.ignore(100,'\n'); //输入回车结束输入
if(a!=null&&b==null&&c==null)
cout<<calc(a)<<endl;
if(a!=null&&b!=null&&c==null)
cout<<calc(a,b)<<endl;
else (a!=null&&b!=null&&c!=null) //看有几个参数,进行参数传递
cout<<calc(a,b,c)<<endl;
return 0;
}
double calc(double a)
{
double square;
square=a*a;
return square;
}
double calc(double a,double b)
{
double product;
product=a*b;
return product;
}
double calc(double a,double b,double c)
{
double sum;
sum=a+b+c;
return sum;
}
以上是想法,不会调试,不理解错在哪里,还请大神帮忙。
首先,没有命名空间你这怎么通过编译?
然后,没有必要在if-else中用 !=null 这种形式,你初始化abc的时候里面是有值的,所以判断没有意义
最后,if else的逻辑是什么鬼?根本不需要好吗
本帖最后由 风过无痕丶 于 2018-2-9 11:24 编辑
1. 标准肯定就不支持你写 iostream.h请把头文件的.h去掉!
2. 你的判断很不合乎逻辑, 变量怎么可能为空, 就算你不初始化 也会有一个垃圾值在里面。不可能为空,
直接调用函数就可以了,不用判断 #include <iostream>
using namespace std;
double calc(double a);
double calc(double a,double b);
double calc(double a,double b,double c);
int main()
{
double a,b,c;
cout<<"please input numbers:";
cin>>a>>b>>c; //非空就把数赋值给a,b,c
cout<<calc(a)<<endl;
cout<<calc(a,b)<<endl;
cout<<calc(a,b,c)<<endl;
return 0;
}
double calc(double a)
{
double square;
square=a*a;
return square;
}
double calc(double a,double b)
{
double product;
product=a*b;
return product;
}
double calc(double a,double b,double c)
{
double sum;
sum=a+b+c;
return sum;
}
BngThea 发表于 2018-2-9 11:08
首先,没有命名空间你这怎么通过编译?
然后,没有必要在if-else中用 !=null 这种形式,你初始化abc的时候 ...
如果没有!=null,那怎么判断我是输入1个数,2个数还是3个数呢?从而调用重载相应的函数啊 风过无痕丶 发表于 2018-2-9 11:20
1. 标准肯定就不支持你写 iostream.h请把头文件的.h去掉!
2. 你的判断很不合乎逻辑, 变量怎么可能为 ...
哦,谢谢。我不是想要判断空,是想要判断输入的是1个数、2个数还是3个数。从而重载调用相应的函数。但不知道怎么判断,就写的空。 qq1242009750 发表于 2018-2-9 11:39
谢谢,我试运行了程序,虽然没有错误了,可是输入数字2,却也没有任何反应,还是达不到题目的要求。
fairylee83 发表于 2018-2-26 10:42
如果没有!=null,那怎么判断我是输入1个数,2个数还是3个数呢?从而调用重载相应的函数啊
你的while循环中就已经完成了abc三个值的输入了 qq1242009750 发表于 2018-2-9 11:39
我又测试了一下程序,发现必须输入3个数,然后第1个数是按照平方来计算,第2个数按照2个数乘积,第3个数按照3个数加和来计算。已经验证了重载。
但还是有bug,就是如果不输入3个数,无论多少回车,都无法运行程序。或者输入字母也会出错。这就是之后要深入学习的条件限制了。
非常感谢。 BngThea 发表于 2018-2-26 11:05
你的while循环中就已经完成了abc三个值的输入了
while原是想判断如遇空格就跳出循环,不是空格就分别赋值给a,b,c.之后再用if语句判断a,b,c是否为空值,如果为空,就不执行相应的重载函数。 fairylee83 发表于 2018-2-27 10:13
while原是想判断如遇空格就跳出循环,不是空格就分别赋值给a,b,c.之后再用if语句判断a,b,c是否为空值,如 ...
那就不能这样写,你一句
cin>>a>>b>>c;
直接会完成abc三个变量的读入工作 BngThea 发表于 2018-2-27 10:27
那就不能这样写,你一句
cin>>a>>b>>c;
直接会完成abc三个变量的读入工作
那这样呢?把cin读取的数字给a,如果不是空格,那么忽略无用数字直至回车,再读取b,否则跳出循环。
#include <iostream>
using namespace std;
double calc(double a);
double calc(double a,double b);
double calc(double a,double b,double c);
int main()
{
double a,b,c;
cout<<"please input numbers:";
cin>>a;
while((cin>>a)!=" ")
{
cin.ignore(100,'\n');
cin>>b;
while((cin>>b)!=" ")
{
cin.ignore(100,'\n');
cin>>c;
}
}
//cin>>a>>b>>c; //非空就把数赋值给a,b,c
cout<<calc(a);
cout<<calc(a,b);
cout<<calc(a,b,c);
return 0;
}
double calc(double a)
{
double square;
square=a*a;
return square;
}
double calc(double a,double b)
{
double product;
product=a*b;
return product;
}
double calc(double a,double b,double c)
{
double sum;
sum=a+b+c;
return sum;
}
这个虽然没有错,可是我运行不了。也不会调试。{:5_99:}
fairylee83 发表于 2018-2-27 11:02
那这样呢?把cin读取的数字给a,如果不是空格,那么忽略无用数字直至回车,再读取b,否则跳出循环。
这 ...
你可以用cin.get来单独读取字符 BngThea 发表于 2018-2-27 11:13
你可以用cin.get来单独读取字符
#include <iostream>
using namespace std;
double calc(double a);
double calc(double a,double b);
double calc(double a,double b,double c);
int main()
{
double a,b,c;
cout<<"please input numbers:";
a=cin.get();
b=cin.get();
c=cin.get();
cout<<calc(a)<<"\n";
cout<<calc(a,b)<<"\n";
cout<<calc(a,b,c)<<"\n";
return 0;
}
double calc(double a)
{
double square;
square=a*a;
return square;
}
double calc(double a,double b)
{
double product;
product=a*b;
return product;
}
double calc(double a,double b,double c)
{
double sum;
sum=a+b+c;
return sum;
}
这样吗?好像不对。
fairylee83 发表于 2018-2-27 15:05
这样吗?好像不对。
cin.get使用之后你的输入流中还有字符,需要先清除一下 BngThea 发表于 2018-2-27 16:07
cin.get使用之后你的输入流中还有字符,需要先清除一下
#include <iostream>
using namespace std;
double calc(double a);
double calc(double a,double b);
double calc(double a,double b,double c);
int main()
{
double a,b,c;
cout<<"please input numbers:";
a=cin.get();
std::cin.clear();
b=cin.get();
std::cin.clear();
c=cin.get();
std::cin.clear();
cout<<calc(a)<<"\n";
cout<<calc(a,b)<<"\n";
cout<<calc(a,b,c)<<"\n";
return 0;
}
double calc(double a)
{
double square;
square=a*a;
return square;
}
double calc(double a,double b)
{
double product;
product=a*b;
return product;
}
double calc(double a,double b,double c)
{
double sum;
sum=a+b+c;
return sum;
}
这样么?结果还是不对哦。
fairylee83 发表于 2018-2-27 16:53
这样么?结果还是不对哦。
因为cin.get默认接受的字符,你输入的数字并不会自动转换为int
其实你只需要cin>>a>>b>>c;就可以了 BngThea 发表于 2018-2-27 17:05
因为cin.get默认接受的字符,你输入的数字并不会自动转换为int
其实你只需要cin>>a>>b>>c;就可以了
那么问题来了,必须输入3个数,程序才能正常运行。如果我不输入3个数,只输入1个数呢?我只想输入一个数,得到平方的操作。输入两个数,得到乘积。输入三个数,得到加和。这个怎么判断呢?{:5_92:}
页:
[1]