C ++类输出不正确

时间:2016-04-24 01:39:51

标签: c++ class output

    #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'而不管我输入什么。

谢谢!

1 个答案:

答案 0 :(得分:0)

这里的问题实际上非常清楚。你的代码有2个变量具有完全相同的名称,其中范围很重要,以便知道实际使用的是哪个变量。

示例:您已将'height'定义为类成员,但也将其定义为set_volume的方法参数。所以,如果你写height = height;,你实际上是在进行自我指定。对于这个特定的例子,我的编译器(clang)警告这个错误消息explicitly assigning value of variable of type 'double' to itself(我希望其他编译器生成类似的东西)

要解决此问题,您必须重命名其中一个变量。我建议将班级成员重命名为_heightm_heightmHeight,以便明确指出这是会员。 (示例基于现有的样式指南)

因此,一旦您解决了这个问题,成员将从0获得不同的值,但结果仍然与您所写的相同:(1/3)

当您进行整数除法时,此代码将始终求值为0。这被定义为将整数除以另一个整数,从而得到结果的泛值。因此,在这种情况下,0.333被覆盖为0.通过(1./3.)替换此代码可以解决此问题。