Вопрос относительно правильного использования только сеттеров и переменных

У меня проблема с моим текущим заданием на программирование. Я чувствую, как будто я очень близок к тому, чтобы это исправить, но что-то не так. Я знаю, что мне нужно сделать что-то другое, чтобы программа работала правильно, так как она сейчас не работает, но я не уверен, что это такое.

Я конкретно борюсь с тем, как использовать одну частную переменную для создания обоих видов температур.

Вот назначение:

Сделать температурный класс. Класс должен иметь функцию для установки температуры в градусах Фаренгейта и функцию для установки температуры в градусах Цельсия. Оставьте только один элемент данных в приватном разделе для хранения температуры. Создайте функцию для получения значения в градусах Фаренгейта и функцию получения температуры в градусах Цельсия. Проверьте каждую функцию тщательно с водителем.

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);
}

1

Решение

Просто используйте одну конкретную единицу для хранения температуры внутри, лучше всего будет Кельвин1 ИМО (так как это стандартная физическая единица СИ).

Выполните необходимые расчеты при установке или получении температуры в градусах Фаренгейта или градусах Цельсия.

Также не используйте целочисленное деление для представления дробей:
(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

6

Другие решения

Ваша проблема заключается в том, что вы пытаетесь сравнить значение температуры с исходным именем переменной, чтобы определить, является ли оно значением по Фаренгейту или Цельсию.

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 …

Сохранение значения в качестве одной из требуемых температур сэкономит на вычислениях, когда этот тип температуры необходим. В этом коде это не будет иметь значения, но при масштабировании программного обеспечения важно исключить чрезмерную обработку.

1