我必须使用以下属性创建一个sphere类:
编写一个具有以下属性的类Sphere:
私人属性:(1)中心的X,Y,Z坐标(2) 半径
访问者和mutator方法 •设置并获取X,Y和Z. 坐标
•设置并获得半径
•获取体积和表面 区域如果是球体。对于球体,
体积=4πr3/ 3
表面积=4πr2
写一个主要的 用于测试球体类的程序。
我之前从未上过课。我想我做得对。但是,我的Volume和Surface Surface的输出非常奇怪。以下是我的程序和输出。
PROGRAM
#define _USE_MATH_DEFINES
#include <cmath>
#include <iostream>
using namespace std;
class Sphere {
private:
float X;
float Y;
float Z;
float R;
float Volume;
float SurfaceArea;
public:
float DefineCoordinates(float x, float y, float z);
void DefineRadius(float radius);
double GetVolume()
{
return (((4 * M_PI*pow(R, 3))) / 3);
}
double GetSurfaceArea()
{
return (4 * M_PI*pow(R, 2));
}
float GetX();
float GetY();
float GetZ();
};
float Sphere::GetX() {
return X;
}
float Sphere::GetY() {
return Y;
}
float Sphere::GetZ() {
return Z;
}
float Sphere::DefineCoordinates(float x, float y, float z) {
X = x;
Y = y;
Z = z;
return 0;
}
void Sphere::DefineRadius(float radius) {
R = radius;
}
int main() {
float inputr, radius, x, y, z;
Sphere sphere;
double Volume = sphere.GetVolume();
double SurfaceArea = sphere.GetSurfaceArea();
char open = '(';
char close = ')';
char comma = ',';
cout << "Please input the center of the sphere in the fashion (X,Y,Z) and press enter: ";
cin >> open >> x >> comma >> y >> comma >> z >> close;
cout << "Please define the radius of the sphere: ";
cin >> inputr;
sphere.DefineCoordinates(x, y, z);
sphere.DefineRadius(inputr);
cout << "This sphere has a center of (" << sphere.GetX() << ", " << sphere.GetY() << ", " << sphere.GetZ() << ")." << endl;
cout << "This sphere has a radius of " << inputr << "." << endl;
cout << "This computes to a volume of " << Volume << " units cubed, and a surface area of " << SurfaceArea << "." << endl;
}
输出 无论我输入什么作为半径,我都会得到:
这计算的体积为-5.18547e + 24个单位立方体和一个表面 面积1.4488e +17。
我做错了什么?此外,任何其他清理我的课程的建议都会有所帮助!
答案 0 :(得分:1)
您过早调用GetVolume()方法。在实际从用户获取半径后调用它。
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<ul class="nav nav-tabs" role="tablist">
<li role="presentation">
<a href="#home" aria-controls="home" role="tab" data-toggle="tab"><span><i class="fa fa-envelope-o" aria-hidden="true"></i>
Some text</span></a>
</li>
<li role="presentation" class="active">
<a href="#profile" aria-controls="profile" role="tab" data-toggle="tab"><span><i class="fa fa-search" aria-hidden="true"></i>
Some Text</span></a>
</li>
<li role="presentation">
<a href="#messages" aria-controls="messages" role="tab" data-toggle="tab"><span><i class="fa fa-comment" aria-hidden="true"></i>Some Text</span></a>
</li>
</ul>
与上述类似。
答案 1 :(得分:1)
简单, 在定义半径之前,您可以读取体积和曲面。
答案 2 :(得分:1)
您的问题是,在您阅读输入之前,您正在调用GetVolume()
和GetSurfaceArea()
函数。您的计算基于未初始化的值。
您应该在调用DefineCoordinates()
和DefineRadius()
你的主要应该与此类似:
int main() {
float inputr, radius, x, y, z;
Sphere sphere;
char open = '(';
char close = ')';
char comma = ',';
cout << "Please input the center of the sphere in the fashion (X,Y,Z) and press enter: ";
cin >> open >> x >> comma >> y >> comma >> z >> close;
cout << "Please define the radius of the sphere: ";
cin >> inputr;
sphere.DefineCoordinates(x, y, z);
sphere.DefineRadius(inputr);
double Volume = sphere.GetVolume();
double SurfaceArea = sphere.GetSurfaceArea();
cout << "This sphere has a center of (" << sphere.GetX() << ", " << sphere.GetY() << ", " << sphere.GetZ() << ")." << endl;
cout << "This sphere has a radius of " << inputr << "." << endl;
cout << "This computes to a volume of " << Volume << " units cubed, and a surface area of " << SurfaceArea << "." << endl;
}
答案 3 :(得分:0)
http://127.0.0.1:8000/triplists/
有一个默认构造函数,它不会初始化Sphere
,X
和Y
成员。在构造之后,您尝试从这些不确定的值计算体积和表面。
换句话说,
Z
没有定义数学关系(似乎你认为它确实如此),这是必要的。该卷将计算一次(用于double Volume = sphere.GetVolume();
的初始化),并且其值不会随您更改Volume
的属性而更改。在您调用sphere
和Sphere::DefineCoordinates
之后>>进行此计算。
或者,不可能构造这样一个无效的Sphere::DefineRadius
对象。了解如何使用构造函数,并不时使用一些Sphere
限定符。
为了完整性,const
和Sphere::Volume
是什么?为什么Spehre::SurfaceArea
会返回Sphere::DefineCoordinates
(始终为float
),为什么我的回答不在顶部?