使用 C++ 和 OOP 创建面积计算程序

Creating an area calculation program using C++ and OOP

本文关键字:计算程序 创建 OOP C++ 使用      更新时间:2023-10-16

赋值的参数是我创建了一个可以计算圆形或正方形面积的程序。 程序功能;然而,却出现了意想不到的结果。 当我输入半径 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);