#include <iostream>
using namespace std;
class Pyramid{
public:
Pyramid();
void set_surfaceArea(double, double, double);
void set_volume(double, double);
double get_surfaceArea();
double get_volume();
void print_sufraceArea();
void print_volume();
private:
double height,
sideLength,
perimeter,
baseArea,
surfaceArea,
volume;
};
Pyramid::Pyramid(){
height = 0;
baseArea = 0;
perimeter = 0;
sideLength = 0;
}
void Pyramid::set_surfaceArea(double baseArea, double sideLength, double perimeter){
baseArea = baseArea;
sideLength = sideLength;
perimeter = perimeter;
}
void Pyramid::set_volume(double baseArea, double height){
baseArea = baseArea;
height = height;
}
double Pyramid::get_surfaceArea(){
return (1/2) * baseArea * perimeter * sideLength;
}
double Pyramid::get_volume(){
x = (1/3) * baseArea * height;
return x;
}
int main(){
double height,
test,
sideLength,
perimeter,
baseArea;
cout << "Enter height: ";
cin >> height;
cout << "Enter side length: ";
cin >> sideLength;
cout << "Enter perimeter: ";
cin >> perimeter;
cout <<"Enter base area: ";
cin >> baseArea;
Pyramid x;
x.set_surfaceArea(baseArea, sideLength, perimeter);
x.set_volume(baseArea, height);
test = x.get_volume();
cout << "test: " << test << endl;
}
当我运行此代码(并输入数字作为输入)时,我得到“test:0”的输出。这段代码是我第一次尝试从头开始创建一个类。我相信有人可以很容易地指出为什么我的输出给我'0'而不管我输入什么。
谢谢!
答案 0 :(得分:0)
这里的问题实际上非常清楚。你的代码有2个变量具有完全相同的名称,其中范围很重要,以便知道实际使用的是哪个变量。
示例:您已将'height'定义为类成员,但也将其定义为set_volume的方法参数。所以,如果你写height = height;
,你实际上是在进行自我指定。对于这个特定的例子,我的编译器(clang)警告这个错误消息explicitly assigning value of variable of type 'double' to itself
(我希望其他编译器生成类似的东西)
要解决此问题,您必须重命名其中一个变量。我建议将班级成员重命名为_height
,m_height
或mHeight
,以便明确指出这是会员。 (示例基于现有的样式指南)
因此,一旦您解决了这个问题,成员将从0获得不同的值,但结果仍然与您所写的相同:(1/3)
当您进行整数除法时,此代码将始终求值为0。这被定义为将整数除以另一个整数,从而得到结果的泛值。因此,在这种情况下,0.333被覆盖为0.通过(1./3.)
替换此代码可以解决此问题。