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 成员重命名为 _height
、m_height
或 mHeight
,以便清楚地表明这是一个成员。 (示例基于现有的风格指南)
所以,一旦你解决了这个问题,成员就会得到一个不同于 0 的值,但是结果仍然和你写的一样:(1/3)
此代码的计算结果始终为 0,因为您正在进行整数除法。这被定义为将一个整数除以另一个整数,得到结果的底值。因此,在这种情况下,0.333 被降为 0。将此代码替换为 (1./3.)
可解决此问题。
#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 成员重命名为 _height
、m_height
或 mHeight
,以便清楚地表明这是一个成员。 (示例基于现有的风格指南)
所以,一旦你解决了这个问题,成员就会得到一个不同于 0 的值,但是结果仍然和你写的一样:(1/3)
此代码的计算结果始终为 0,因为您正在进行整数除法。这被定义为将一个整数除以另一个整数,得到结果的底值。因此,在这种情况下,0.333 被降为 0。将此代码替换为 (1./3.)
可解决此问题。