C++ Class 输出不正确

C++ Class output incorrect

    #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" 的输出。这段代码是我第一次尝试从头开始制作 class。我敢肯定有人可以轻松指出为什么无论我输入什么,我的输出都是“0”。

谢谢!

这里的问题其实已经很清楚了。您的代码存在 2 个名称完全相同的变量,其中范围很重要,以便了解实际使用了哪个变量。

例如:您已将 'height' 定义为 class 成员,但也定义为 set_volume 的方法参数。所以如果你写 height = height; 你实际上是在做一个自我赋值。对于这个特定示例,我的编译器 (clang) 对此发出警告并显示错误消息 explicitly assigning value of variable of type 'double' to itself(我希望其他编译器生成类似的内容)

要解决此问题,您必须重命名其中一个变量。我建议将 class 成员重命名为 _heightm_heightmHeight,以便清楚地表明这是一个成员。 (示例基于现有的风格指南)

所以,一旦你解决了这个问题,成员就会得到一个不同于 0 的值,但是结果仍然和你写的一样:(1/3)

此代码的计算结果始终为 0,因为您正在进行整数除法。这被定义为将一个整数除以另一个整数,得到结果的底值。因此,在这种情况下,0.333 被降为 0。将此代码替换为 (1./3.) 可解决此问题。