Как я могу позволить пользователю изменять значение фракций?

Я должен написать программу, которая имеет num и denom в качестве членов данных класса Fractions. Я также должен включить функцию конструктора, которая устанавливает оба равными 1 или допускает инициализацию пользователя, перегруженную операторную функцию для + и функцию-член, которая может отображать значения данных объекта. Также предполагается запретить 0 для значения знаменателя.
Как я могу позволить пользователю изменять значения для фракций? Также, что я должен сделать, чтобы запретить использование 0 в качестве знаменателя? Когда я запускаю свою программу, она просто показывает слова в первых 4 строках, но не позволяет вводить данные пользователем.

#include <iostream>

using namespace std;

class Fractions
{
private:
int num;
int denom;
public:
Fractions() : num(1), denom(1) {}
Fractions(int numerator, int denominator)
: num(numerator), denom(denominator) {}

Fractions& operator+=(Fractions f);

int numerator() const { return num; }
int denominator() const { return denom; }

};

Fractions& Fractions::operator+=(Fractions f)
{
if (denom != f.denom)
{
int new_base = denom * f.denom;

num *= new_base / denom;
denom = new_base;

f.num *= new_base / f.denom;
f.denom = new_base;
}

num += f.num;
return *this;
}

// operator+ is commonly implemented in terms of operator+=
Fractions operator+(Fractions a, const Fractions& b)
{
return a += b;
}

std::ostream& operator<<(std::ostream& os, const Fractions& f)
{
os << f.numerator();

if (f.denominator() != 1)
os << '/' << f.denominator();

return os;
}

int main()
{
int w, x, y, z;
Fractions a(w, x);
Fractions b(y, z);

std::cout << "Enter the first numerator: " << endl;
std::cin >> w;
std::cout << "Enter the first denominator: " << endl;
std::cin >> x;
std::cout << "Enter the second numerator: " << endl;
std::cin >> y;
std::cout << "Enter the second denominator: " << endl;
std::cin >> z;

std::cout << a << " + " << b << " = " << a + b << '\n';
}

0

Решение

Вы должны использовать переменные после ввода пользователя:

int main()
{
int w, x, y, z;

std::cout << "Enter the first numerator: " << endl;
std::cin >> w;
std::cout << "Enter the first denominator: " << endl;
std::cin >> x;
std::cout << "Enter the second numerator: " << endl;
std::cin >> y;
std::cout << "Enter the second denominator: " << endl;
std::cin >> z;

Fractions a(w, x);
Fractions b(y, z);

std::cout << a << " + " << b << " = " << a + b << '\n';

}

0

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

В вашем коде есть несколько проблем.

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

Чтобы позволить пользователю изменять значения, вы можете реализовать функции

int & numerator() { return num; }
а также

int & denominator() { return num; }

а затем использовать

a.numerator() = 5 например.

Кроме того, вы можете изменить свой код так, чтобы operator+ не реализован как operator+=,

0