使用 C++ 和 OOP 创建面积计算程序
Creating an area calculation program using C++ and OOP
赋值的参数是我创建了一个可以计算圆形或正方形面积的程序。 程序功能;然而,却出现了意想不到的结果。 当我输入半径 26 时,程序返回半径值为 1.97674e-307,面积为 0。 正方形的面积为 0。 这是我所拥有的...
主.cpp
#include <iostream>
#include "Circle.h"
#include "Square.h"
int main()
{
using namespace std;
int question;
cout << "Welcome to the area calculation program.n"
<< "I can help you calculate the area of a square or circle.n"
<< endl;
cout << "Please enter 1 to calculate the area of a circle and 2 for a square: ";
cin >> question;
switch(question)
{
case 1:
{
cout << "Please enter the radius of the circle: ";
double radius;
Circle r(radius);
cin >> radius;
cout << "The area of a circle with a radius with a radius of " << r.getRadius() << " has an area of " << r.getArea() << endl;
break;
}
case 2:
{
cout << "Please enter the side of the square: ";
double side;
Square s(side);
cin >> side;
cout << "The are of a square with a side of " << side << " has an area of " << s.getArea() << endl;
}
}
return 0;
}
圈子.cpp
#include "Circle.h"
Circle::Circle(double r)
{
radius = r;
}
double Circle::getRadius()
{
return radius;
}
double Circle::getArea()
{
return radius * radius * PI;
}
方形.cpp
#include "Square.h"
Square::Square(double s)
{
side = s;
}
double Square::getArea()
{
return side * side;
}
圆圈
const double PI = 3.1415926;
class Circle
{
private:
double radius;
public:
Circle(double); // double is for the radius
double getRadius();
double getArea();
};
Square.h
class Square
{
private:
double side;
public:
Square(double);
double getArea();
};
请更改这两个语句的顺序,您是在获取 radius 的输入值之前创建实例的,因此垃圾值在实例中作为半径。
Circle r(radius);
cin >> radius;
自
cin >> radius;
Circle r(radius);
注意:还有一件事我强烈建议在声明类似时为变量提供初始值
double radius = 0;
这将使您免于垃圾值。希望对你有帮助...
代码的问题在于C++值和引用语义。我将分解这里发生的事情。
double radius;
Circle r(radius);
cin >> radius;
第一行声明了一个双精度,它将为它保留一些内存,但不初始化它。然后,第二行将获取当前未初始化的radius
值,并使用它来构造Circle
。这将使用可能不应该发生的未初始化值初始化圆半径。
第三行,调用operator>>(std::istream&, double&)
,用于从流cin
读取双精度值并将其放在radius
中。在此函数中,radius
通过引用获取,如函数签名中的&
所示。该值直接存储到您声明的变量中。
解决此问题的最简单方法是切换第二行和第三行,从而在使用radius
之前对其进行初始化。
double radius;
cin >> radius;
Circle r(radius);
相关文章:
- 如何检查第三个 API 是否在 Linux 中为 c/c++ 程序创建了一个新线程?
- 从头开始为应用程序创建 docker 映像是否有意义?
- 如何查看在程序级别为我的程序创建了多少 vtable 和 vpointer
- 我的C++级数计算程序出了什么问题?被困了好几个星期
- 如何在运行时对程序创建的.sys文件设置文件版本
- 使用 C++ 和 OOP 创建面积计算程序
- 从函数应用程序创建 std::vector
- 将 Qml/C++ 应用程序创建为插件
- 如何为带有计时功能的程序创建计时器?
- 使用Visual C ,卡在程序创建分配中
- 从Ubuntu中的CPP程序创建新文件
- 通过编译应用程序创建Windows服务
- 我正在尝试编写一个简单的计算程序,但答案一直返回为 0
- 在c++上创建税务计算程序,错误为未初始化的局部变量
- 不计算程序中的最低和最高成绩。(C++)(流)
- 我们可以使用mfc应用程序创建pdf文件吗
- 精确计算C++程序所使用的内存
- 使用可执行应用程序创建和"Scheduling" pthreads
- 通过 JNI 从应用程序创建 JVM 后C++找不到类
- 程序 创建向量并向量并计算组合数