首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用多个重载来根据传入的数字数量获得不同的答案?

如何使用多个重载来根据传入的数字数量获得不同的答案?
EN

Stack Overflow用户
提问于 2019-04-15 21:58:18
回答 4查看 116关注 0票数 3

编写一个带有3个重载的函数GetVolume()。如果传入一个值,则查找以该值为半径的球体的体积。如果两个值被传入,那么找到一个圆柱体的体积,这些值是它的半径和高度。如果传入三个值,请查找框的卷,其中三个值为其长度、宽度和高度。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <cmath>

using namespace std;

double PI = 3.14;
double GetVolume(double r)
{
    cout << "Sphere's volume is: ";
    return ((4 * PI * pow (r , 3.0))/3);
}

double GetVolume(double r, double h)
{
    cout << "Cylinder's volume is: ";
    return (PI * pow (r, 2) * h);
}

double GetVolume(double l, double h, double w)
{
    cout << "Box's volume is: ";
    return (w * l * h);
}

int main()
{

    double num = 0, num1 = 0, num2 = 0, num3 = 0;
        double ans1, ans2, ans3;

        cout << "Please enter 1, 2, or 3 numbers depending on whether you want the volume of a sphere, cylinder, or a box." << endl;

        cin >> num1, num2, num3;

        ans1 = GetVolume(num1);
        ans2 = GetVolume(num1, num2);
        ans3 = GetVolume(num1, num2, num3);

        cout << ans1 << ans2 << ans3 << endl;

        system("pause");


    return 0;
}

我不明白为什么我不能使用我的getvolume函数来显示三种不同的结果,基于在cin中插入的数字,我在上面附加了一个问题,我必须回答它的第三部分的五部分分配。对不起,如果这是不够的信息,我会尽量提供更多。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-04-15 22:43:33

您可以像下面这样声明类和重载GetVolume函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
double PI = 3.14;

class calculateVolume {
    public:
    double GetVolume(double r)
    {
        cout << "Sphere's volume is: ";
        return ((4 * PI * pow (r , 3.0))/3);
    }

    double GetVolume(double r, double h)
    {
        cout << "Cylinder's volume is: ";
        return (PI * pow (r, 2) * h);
    }

    double GetVolume(double l, double h, double w)
    {
        cout << "Box's volume is: ";
        return (w * l * h);
    }
}

int main() {
    calculateVolume volObject;
    cout<<volObject.GetVolume(5);
    return 0;
}

以上代码将给出输出Sphere's volume is: 523.333

它只是工作片段,您可以根据需要调整代码。

票数 0
EN

Stack Overflow用户

发布于 2019-04-16 00:22:32

您只从这一行的标准输入中读取一个数字。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cin >> num1, num2, num3;

这里的逗号是operator,,它计算多个表达式并丢弃除最后一个表达式之外的所有表达式。如果您想读取多个数字,则需要链接>>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cin >> num1 >> num2 >> num3;

但是,您似乎想知道输入了多少个数字,您可以通过查看operator>>返回的值来测试这个数字。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (!(cin >> num1)) {
    cout << "no numbers entered";
} else if (!(cin >> num2)) {
    cout << GetVolume(num1);
} else if (!(cin >> num3)) {
    cout << GetVolume(num1, num2);
} else {
    cout << GetVolume(num1, num2, num3);
}
票数 3
EN

Stack Overflow用户

发布于 2019-04-15 22:19:21

您可能需要阅读c++中的逗号运算符。其他

基本上在队伍里,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
num = GetVolume(num1), GetVolume(num1,num2), GetVolume(num1, num2, num3);

GetVolume(num1)进行评估。结果就会被丢弃。

然后对GetVolume(num1,num2)进行评价。结果,丢弃

最后,对GetVolume(num1, num2, num3)进行评估,其结果由operator =的RHS上的(Expr、Expr、Expr)返回。

然后将返回的值分配给num。所以你只能看到一个答案。

类似地,您的cin >> num1, num2, num3;将只接受一个输入,即num3。

可能的修正

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int ans1, ans2, ans3;
cin >> num1 >> num2 >> num3;
ans1 = GetVolume(num1);
ans2 = GetVolume(num1, num2);
ans3 = GetVolume(num1, num2, num3);

其他问题

  1. 从函数中返回一个类型的double,但将它们存储在int中。这造成了严重的精度损失。我相信你想换个双人间。
  2. 您的cout和下面的代码似乎不连贯。也许你希望你先接受一个输入。测试它是1,2还是3,然后采取相应的行动。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55701438

复制
相关文章
R:purrr包用于循环迭代
purrr中有多个迭代函数,可以用于快速解决循环迭代的问题,purrr中常用的迭代函数有map、map2、walk、reduce等等。
生信菜鸟团
2020/07/16
1.6K0
R中的循环绘图
上面我们将每一张图都单独输出了,下面来介绍如何将其全部组合起来,分别介绍两种R包的方法gridExtra&patchwork
R语言数据分析指南
2022/09/21
4.1K0
R中的循环绘图
【Kotlin 协程】Channel 通道 ② ( Channel 通道容量 | Channel 通道迭代 | 使用 iterator 迭代器进行迭代 | 使用 for in 循环进行迭代 )
直到 调用 Channel#receive 函数 取走了缓冲区中的数据 , 缓冲区 有了空间 , Channel#send 函数才会恢复执行 ;
韩曙亮
2023/03/30
7580
【Kotlin 协程】Channel 通道 ② ( Channel 通道容量 | Channel 通道迭代 | 使用 iterator 迭代器进行迭代 | 使用 for in 循环进行迭代 )
matlab循环求和_r语言for循环计算求和
编写程序求和 S=a+aa+aaa+aaaa+…,其中a 是1-9 中的一个数字。n 为一正整数, a 和n均从键盘输入。(例如输入n 为4,a 为2,S=2+22+222+2222)
全栈程序员站长
2022/11/08
1.2K0
OpenGL进行简单的通用计算实例
博主作为OpenGL新手,最近要用OpenGL进行并行的数据计算,突然发现这样的资料还是很少的,大部分资料和参考书都是讲用OpenGL进行渲染的。好不容易找到一本书《GPGPU编程技术,从OpenGL、CUDA到OpenCL》,里面对并行处理的发展进行了系统性的介绍,还是很不错的。小白博主很兴奋,看完书中第三章后恍然大悟了很多,就贴出书中代码3-3的例子,实现一番,并用一副图片数据做了实现。 实现环境:Window7 32bit, VS2013+OpenGL3.3+GLEW+GLFW。 OpenGL用来进行
一棹烟波
2018/01/12
2.1K0
OpenGL进行简单的通用计算实例
迭代循环:for语句
• 简单类型用来表示值:整数int、浮点数float、复数complex、逻辑值bool、字符串str
陆勤_数据人网
2020/08/27
8200
【R语言】计算10亿以内for循环加速
笔者主力机是MBAM1芯片(8+256),某个下午巩固循环突然思考到个问题,小循环很快就能run出来,中循环还勉勉强强,稍微上点强度就运行的很慢。虽然是CPU占用100%,8颗核心好像是偷着懒跑的,但是丢给我那台4核心8线程黑苹果,是跑满的,说明ARM在多线程的时候,有点东西
生信初学者
2023/05/06
5360
计算机基础,Python基础--变量以及简单的循环
一、计算机基础 1.CPU   相当于人体的大脑,用于计算处理数据。 2.内存    用于存储数据,CPU从内存调用数据处理计算,运算速度很快。 PS:问:既然在内存里的数据CPU运算速度快,为什么计算机不全部用内存呢?   答:1.内存成本很高;2.计算机断电时,在内存里的数据会即刻消失;因此计算机不会全部使用内存存储数据。 3.硬盘   用于储存应该长久保存的数据和文件等。硬盘分两种,固态硬盘和机械硬盘。固态硬盘(Solid State Drive)用固态电子存储芯片阵列而制成的硬盘,由控制单元和
新人小试
2018/04/12
8750
python - 可迭代/迭代器对象、for循环原理
目录 可迭代对象与迭代器对象 for循环本质 可迭代对象与迭代器对象 迭代:迭代的意思就是更新换代,每次的更新都必须依赖上一次的结果 迭代其实给我们提供了一种不依赖索引取值的方式 可迭代对象: 内置有 _ _ iter _ _方法的都称为可迭代对象 有字符串、列表、元组、字典、集合、文件对象 迭代器对象: 内置有 _ _iter _ _ 方法,又含有 _ _next _ _方法称为迭代器对象 文件本身即是可迭代对象,也是迭代器对象 可迭代对象调用_ _it
HammerZe
2022/03/25
9330
如何用R语言进行云计算
作者 | Ajay Ohri 翻译 | 丁雪 校对 | ValaWong 如今,几乎所有领域或业务活动正在通过SMAC进行数据转换。SMAC指的是社交(Socia)、移动(Mobile)、分析(Analytics)和云服务(Cloud)。这个改变的影响已经涉及到包括组织、人员与产品在内的范围。在本文中,我们将通过使用云计算让你提高数据分析能力。 我们已经使用R语言和RStudio由浅入深地解释了云计算的相关概念(请参考大数据文章2015年9月21日发布的文章《如何在云计算平台使用R语言编程的快速入门指南
大数据文摘
2018/05/22
3.9K0
R语言中的循环补齐
--- title: "循环补齐" output: html_document date: "2023-03-08" --- 当我们对两个长度不一致的向量进行操作时,会发生什么呢? x = c(1,3,5,6,2) y = c(3,2,5) x == y ## [1] FALSE FALSE TRUE FALSE TRUE 虽然出现了提示Warning: longer object length is not a multiple of shorter object length,并没有发生报错。 从输
小叮当aka
2023/03/17
1.6K0
迭代循环丨SUMX函数
白茶在之前的一期,曾经分享过RANKX排名的问题,但是白茶当时犯了一个很严重的错误,这里和小伙伴们说一声抱歉。本期呢,既是纠正这个错误,也是学习另一个函数——迭代循环函数之SUMX。
PowerBI丨白茶
2021/09/01
1.1K0
迭代循环丨SUMX函数
ES6 的循环和可迭代对象
首先是经典的 for i 循环,它使你可以遍历数组或可索引的且有 length 属性的任何对象。
疯狂的技术宅
2020/09/01
1.9K0
ES6 的循环和可迭代对象
如何正确遍历删除List中的元素(普通for循环、增强for循环、迭代器iterator、removeIf+方法引用)
所以推荐使用迭代器iterator,或者JDK1.8以上使用lambda表达式进行List的遍历删除元素操作。
崔笑颜
2020/06/08
12.2K0
Python 中的迭代器
自从第4章4.2.6节出现了“可迭代的”(Iterable)一词之后,就不断遇到具有此特征的对象,比如列表、字符串、字典等。判断一个对象是否是可迭代的,主要看它是否具有 __iter__() 方法。
老齐
2021/11/15
1.1K0
r语言的for循环_两效十MVR强制循环
上述例子中直接将结果进行print,在实际应用中基本不会这么做。一般会将输出结果以向量或其他形式储存。如下:
全栈程序员站长
2022/11/17
3.8K1
r语言的for循环_两效十MVR强制循环
大学生常用python变量和简单的数据类型、可迭代对象、for循环的3用法
单下划线_ 变量 在Python中,变量可以包含数字、字母、下划线等,所以单独一个下划线_也是一个变量,表示一个临时对象,一般后续不会用到,比如:
20岁爱吃必胜客
2023/02/26
9050
大学生常用python变量和简单的数据类型、可迭代对象、for循环的3用法
R语言for循环①
for循环是一种重复控制结构,可以让您有效地编写一个需要执行特定次数的循环。 for (value in vector) { statements } 示例: j <- LETTERS[1:4] for ( i in j) { print(i) } 它产生如下结果: [1] "A" [1] "B" [1] "C" [1] "D" 下标访问 > a <- c("a","b","c","d") > for (i in c(1:length(a))) + {print(i)} [1] 1 [1] 2
用户1359560
2018/08/27
1.3K0
测试用例中的细节
编写测试用例是在实际测试执行开始之前进行的软件测试活动的重要组成部分。因此,在编写测试用例时必须头脑清晰地理解需求。测试执行阶段的顺利程度主要取决于测试用例的编写质量,还取决于对需求的理解程度。理论上来讲应避免在测试用例中放入不必要或不需要的细节,但放入必需和重要的细节反而又会起着重要的作用。
FunTester
2020/02/17
5600
点击加载更多

相似问题

Rails 4从迁移索引中删除迁移ID

32

Rails迁移:从表中删除列

11

从迁移文件中删除Rails 4.2降级

12

Rails迁移中默认值的常量。

33

在rails中删除迁移

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文