鱼C论坛

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

c++重载函数程序

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

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

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

x
题目:利用重载函数设计程序,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;
}

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 | 显示全部楼层
#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;
}
想知道小甲鱼最近在做啥?请访问 -> 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,否则跳出循环。
#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;
}
这个虽然没有错,可是我运行不了。也不会调试。
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来单独读取字符
#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;
}
这样吗?好像不对。
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使用之后你的输入流中还有字符,需要先清除一下
#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;
}
这样么?结果还是不对哦。
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-11-6 07:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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