C++类输出不正确

C++ Class output incorrect

本文关键字:不正确 输出 C++      更新时间:2023-10-16
    #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"。

谢谢!

这里的问题其实很清楚。您的代码正在遭受 2 个名称完全相同的变量的困扰,其中范围对于知道实际使用的变量很重要。

示例:您已将"高度"定义为类成员,但也定义为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.) 可解决此问题。