鱼C论坛

 找回密码
 立即注册
查看: 3267|回复: 18

c++重载函数程序

[复制链接]
发表于 2018-2-9 10:48:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:利用重载函数设计程序,1)传入一个参数时,计算平方。2)传入两个参数时,计算两数乘积。3)传入三个参数时,计算三数的和。
顺便吐槽一下小甲鱼老师c++的视频是坑王驾到,管挖坑不管埋,刚学C++的我对留下的课后作业一头雾水。又找不到课后作业的答案。
  1. #include <iostream.h>

  2. double calc(double a);
  3. double calc(double a,double b);
  4. double calc(double a,double b,double c);

  5. int main()
  6. {
  7.     double a,b,c;
  8.     cout<<"please input numbers:"<<"\n press enter to end of input";
  9.    
  10.     while(cin!=' ')
  11.     {
  12.         cin>>a>>b>>c;        //非空就把数赋值给a,b,c
  13.     }
  14.     cin.ignore(100,'\n');        //输入回车结束输入
  15.     if(a!=null&&b==null&&c==null)
  16.         cout<<calc(a)<<endl;
  17.     if(a!=null&&b!=null&&c==null)
  18.         cout<<calc(a,b)<<endl;
  19.     else (a!=null&&b!=null&&c!=null)     //看有几个参数,进行参数传递
  20.         cout<<calc(a,b,c)<<endl;
  21.    
  22.    
  23.     return 0;
  24. }

  25. double calc(double a)
  26. {
  27.     double square;
  28.     square=a*a;
  29.     return square;
  30. }

  31. double calc(double a,double b)
  32. {
  33.     double product;
  34.     product=a*b;
  35.     return product;
  36. }
  37. double calc(double a,double b,double c)
  38. {
  39.     double sum;
  40.     sum=a+b+c;
  41.     return sum;
  42. }
复制代码


QQ截图20180209104650.png
以上是想法,不会调试,不理解错在哪里,还请大神帮忙。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-9 11:08:25 | 显示全部楼层
首先,没有命名空间你这怎么通过编译?
然后,没有必要在if-else中用 !=null 这种形式,你初始化abc的时候里面是有值的,所以判断没有意义
最后,if else的逻辑是什么鬼?根本不需要好吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 11:20:48 | 显示全部楼层
本帖最后由 风过无痕丶 于 2018-2-9 11:24 编辑

1. 标准肯定就不支持你写 iostream.h  请把头文件的.h去掉!
2. 你的判断很不合乎逻辑, 变量怎么可能为空, 就算你不初始化 也会有一个垃圾值在里面。不可能为空,

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 11:35:10 | 显示全部楼层
直接调用函数就可以了,不用判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 11:39:58 | 显示全部楼层
  1. #include <iostream>
  2. using namespace std;

  3. double calc(double a);
  4. double calc(double a,double b);
  5. double calc(double a,double b,double c);

  6. int main()
  7. {
  8.     double a,b,c;
  9.     cout<<"please input numbers:";
  10.     cin>>a>>b>>c;        //非空就把数赋值给a,b,c
  11.     cout<<calc(a)<<endl;
  12.     cout<<calc(a,b)<<endl;
  13.     cout<<calc(a,b,c)<<endl;
  14.     return 0;
  15. }

  16. double calc(double a)
  17. {
  18.     double square;
  19.     square=a*a;
  20.     return square;
  21. }

  22. double calc(double a,double b)
  23. {
  24.     double product;
  25.     product=a*b;
  26.     return product;
  27. }
  28. double calc(double a,double b,double c)
  29. {
  30.     double sum;
  31.     sum=a+b+c;
  32.     return sum;
  33. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-26 10:42:28 | 显示全部楼层
BngThea 发表于 2018-2-9 11:08
首先,没有命名空间你这怎么通过编译?
然后,没有必要在if-else中用 !=null 这种形式,你初始化abc的时候 ...

如果没有!=null,那怎么判断我是输入1个数,2个数还是3个数呢?从而调用重载相应的函数啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-26 10:47:41 | 显示全部楼层
风过无痕丶 发表于 2018-2-9 11:20
1. 标准肯定就不支持你写 iostream.h  请把头文件的.h去掉!
2. 你的判断很不合乎逻辑, 变量怎么可能为 ...

哦,谢谢。我不是想要判断空,是想要判断输入的是1个数、2个数还是3个数。从而重载调用相应的函数。但不知道怎么判断,就写的空。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-26 10:48:48 | 显示全部楼层

谢谢,我试运行了程序,虽然没有错误了,可是输入数字2,却也没有任何反应,还是达不到题目的要求。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-26 11:05:56 | 显示全部楼层
fairylee83 发表于 2018-2-26 10:42
如果没有!=null,那怎么判断我是输入1个数,2个数还是3个数呢?从而调用重载相应的函数啊

你的while循环中就已经完成了abc三个值的输入了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-27 10:01:22 | 显示全部楼层

我又测试了一下程序,发现必须输入3个数,然后第1个数是按照平方来计算,第2个数按照2个数乘积,第3个数按照3个数加和来计算。已经验证了重载。
但还是有bug,就是如果不输入3个数,无论多少回车,都无法运行程序。或者输入字母也会出错。这就是之后要深入学习的条件限制了。
非常感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-27 10:13:57 | 显示全部楼层
BngThea 发表于 2018-2-26 11:05
你的while循环中就已经完成了abc三个值的输入了

while原是想判断如遇空格就跳出循环,不是空格就分别赋值给a,b,c.之后再用if语句判断a,b,c是否为空值,如果为空,就不执行相应的重载函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-27 10:27:39 | 显示全部楼层
fairylee83 发表于 2018-2-27 10:13
while原是想判断如遇空格就跳出循环,不是空格就分别赋值给a,b,c.之后再用if语句判断a,b,c是否为空值,如 ...

那就不能这样写,你一句
cin>>a>>b>>c;
直接会完成abc三个变量的读入工作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-27 11:02:45 | 显示全部楼层
BngThea 发表于 2018-2-27 10:27
那就不能这样写,你一句
cin>>a>>b>>c;
直接会完成abc三个变量的读入工作

那这样呢?把cin读取的数字给a,如果不是空格,那么忽略无用数字直至回车,再读取b,否则跳出循环。
  1. #include <iostream>
  2. using namespace std;

  3. double calc(double a);
  4. double calc(double a,double b);
  5. double calc(double a,double b,double c);

  6. int main()
  7. {
  8.     double a,b,c;
  9.     cout<<"please input numbers:";
  10.     cin>>a;
  11.     while((cin>>a)!=" ")
  12.     {
  13.         cin.ignore(100,'\n');
  14.         cin>>b;
  15.         while((cin>>b)!=" ")
  16.         {
  17.             cin.ignore(100,'\n');
  18.             cin>>c;
  19.         }
  20.     }
  21.    
  22.     //cin>>a>>b>>c;     //非空就把数赋值给a,b,c
  23.     cout<<calc(a);
  24.     cout<<calc(a,b);
  25.     cout<<calc(a,b,c);
  26.     return 0;
  27. }

  28. double calc(double a)
  29. {
  30.     double square;
  31.     square=a*a;
  32.     return square;
  33. }

  34. double calc(double a,double b)
  35. {
  36.     double product;
  37.     product=a*b;
  38.     return product;
  39. }
  40. double calc(double a,double b,double c)
  41. {
  42.     double sum;
  43.     sum=a+b+c;
  44.     return sum;
  45. }
复制代码

这个虽然没有错,可是我运行不了。也不会调试。
QQ截图20180227105616.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-27 11:13:57 | 显示全部楼层
fairylee83 发表于 2018-2-27 11:02
那这样呢?把cin读取的数字给a,如果不是空格,那么忽略无用数字直至回车,再读取b,否则跳出循环。

这 ...

你可以用cin.get来单独读取字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-27 15:05:57 | 显示全部楼层
BngThea 发表于 2018-2-27 11:13
你可以用cin.get来单独读取字符

  1. #include <iostream>
  2. using namespace std;

  3. double calc(double a);
  4. double calc(double a,double b);
  5. double calc(double a,double b,double c);

  6. int main()
  7. {
  8.     double a,b,c;
  9.     cout<<"please input numbers:";
  10.     a=cin.get();
  11.     b=cin.get();
  12.     c=cin.get();         
  13.     cout<<calc(a)<<"\n";
  14.     cout<<calc(a,b)<<"\n";
  15.     cout<<calc(a,b,c)<<"\n";
  16.     return 0;

  17. }

  18. double calc(double a)
  19. {
  20.     double square;
  21.     square=a*a;
  22.     return square;
  23. }

  24. double calc(double a,double b)
  25. {
  26.     double product;
  27.     product=a*b;
  28.     return product;
  29. }
  30. double calc(double a,double b,double c)
  31. {
  32.     double sum;
  33.     sum=a+b+c;
  34.     return sum;
  35. }
复制代码

这样吗?好像不对。
QQ截图20180227150517.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-27 16:07:13 | 显示全部楼层
fairylee83 发表于 2018-2-27 15:05
这样吗?好像不对。

cin.get使用之后你的输入流中还有字符,需要先清除一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-27 16:53:57 | 显示全部楼层
BngThea 发表于 2018-2-27 16:07
cin.get使用之后你的输入流中还有字符,需要先清除一下
  1. #include <iostream>
  2. using namespace std;

  3. double calc(double a);
  4. double calc(double a,double b);
  5. double calc(double a,double b,double c);

  6. int main()
  7. {
  8.     double a,b,c;
  9.     cout<<"please input numbers:";
  10.     a=cin.get();
  11.     std::cin.clear();
  12.     b=cin.get();
  13.     std::cin.clear();
  14.     c=cin.get();
  15.     std::cin.clear();
  16.     cout<<calc(a)<<"\n";
  17.     cout<<calc(a,b)<<"\n";
  18.     cout<<calc(a,b,c)<<"\n";
  19.     return 0;

  20. }

  21. double calc(double a)
  22. {
  23.     double square;
  24.     square=a*a;
  25.     return square;
  26. }

  27. double calc(double a,double b)
  28. {
  29.     double product;
  30.     product=a*b;
  31.     return product;
  32. }
  33. double calc(double a,double b,double c)
  34. {
  35.     double sum;
  36.     sum=a+b+c;
  37.     return sum;
  38. }
复制代码

这样么?结果还是不对哦。
QQ截图20180227165250.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-27 17:05:39 | 显示全部楼层
fairylee83 发表于 2018-2-27 16:53
这样么?结果还是不对哦。

因为cin.get默认接受的字符,你输入的数字并不会自动转换为int

其实你只需要cin>>a>>b>>c;就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-27 17:26:10 | 显示全部楼层
BngThea 发表于 2018-2-27 17:05
因为cin.get默认接受的字符,你输入的数字并不会自动转换为int

其实你只需要cin>>a>>b>>c;就可以了

那么问题来了,必须输入3个数,程序才能正常运行。如果我不输入3个数,只输入1个数呢?我只想输入一个数,得到平方的操作。输入两个数,得到乘积。输入三个数,得到加和。这个怎么判断呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 03:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表