有关仅正确使用设置器和变量的问题

时间:2018-09-25 18:57:47

标签: c++ getter-setter setter converters

我目前的编程工作遇到问题。我觉得我似乎已经很接近正确了,但是有些问题了。我知道我必须做一些不同的事情才能使程序正确运行,因为它目前无法正常工作,但是我不确定它是什么。

我特别在努力使用单个私有变量来同时产生两种温度。

这是作业:

  

进行温度课程。该类应具有以华氏度设置温度的功能和以摄氏度为单位设置温度的功能。在专用部分中仅保留一个数据成员用于存储温度。创建一个获取华氏温度的函数和一个获取摄氏温度的函数。使用驱动程序彻底测试每个功能。

     

F =(9/5)C + 32,C =(5/9)(F-32)

当前代码:

#include<iostream>
using namespace std;

class Temperature
{
private:
    double temperature;

public:
    void set_fahrenheit(double f)
    {
        temperature = f;
    }

    void set_celsius(double c)
    {
        temperature = c;
    }

    double get_fahrenheit()
    {
        return temperature;
    }

    double get_celsius()
    {
        return temperature;
    }

    double converter(double temperature)
    {
        if (temperature = f)
        {
            return (9/5)*temperature + 32;
        }
        else if (temperature = c))
        {
            return (5/9)*(temperature - 32;
        }
    }    
};

int main()
{
    Temperature Temp1;
    double temperaturetemp;
    string response;

    cout << "Would you like to convert a Celsius temperature to Fahrenheit or convert a Fahrenheit temperature to Celsius? (Enter C2F or F2C respectively)" << endl;
    cin >> response;

    cout << "Please enter the temperature you would like to convert in degrees" << endl;
    cin >> temperaturetemp;

    if (response == "C2F"){Temp1.set_fahrenheit(temperaturetemp);}
    else if (response == "F2C"){Temp1.set_celsius(temperaturetemp);}

    cout << Temp1.converter(temperaturetemp);
 }

2 个答案:

答案 0 :(得分:6)

只需使用一个特定的单位内部存储温度,最好是开尔文 1 IMO(因为它是标准的SI物理单位)。

在将温度设置为华氏度或摄氏度时,请进行必要的计算。

也不要使用整数除法来表示分数:
(5/9)将得出0整数除法,应该是(5.0/9.0)才能获得有效的double值。
9/5相同,因为整数除法将得到1


您的代码还有其他问题:

  1. 在函数double converter(double temperature)中,您尝试使用f,该函数不在此范围内
  2. 在同一函数中,您有一个名为temperature的参数,该参数用相同的名称遮盖了成员变量

1) 0K = -459,67F / 0K = -273.15°C

答案 1 :(得分:1)

您的问题是因为您试图将温度值与初始变量名称进行比较,以确定温度是华氏温度还是摄氏温度。

if (temperature = f)
...
else if (temperature = c))

您应该选择一种温度类型而不是另一种温度类型,以始终将值存储为,并在需要时将其转换为另一种。在此示例中,使用摄氏温度。

void set_celsius(double c)
{
    temperature = c;
}
void set_fahrenheit(double f)
{
    temperature = (5.0/9.0)(f - 32);
}

您的华氏吸气剂也可以这样做。确实不需要您的转换器方法(也不称为atm)。

编辑

您还应该使用浮点运算,因为整数运算将被截断为0,因为您要输入的值是十进制的0.5555 ...

将值存储为所需温度之一将在需要该温度类型时节省计算。在这段代码中,这没有什么区别,但是在扩展软件规模时,消除过多的处理很重要。