Добавление дробей с использованием классов (неправильный вывод)

Ранее я написал программу, которая складывает две дроби вместе и печатает вывод, я просто знаю. Первоначально я реализовал программу, используя структуры, и теперь я пытаюсь повторно реализовать ее, используя классы, не так просто, я думаю … Проблема заключается в том, что всякий раз, когда я печатаю выходные данные, они возвращаются в виде нулей повсюду (двойные нули для знаменателя, Я тоже не знаю, почему он это делает), независимо от того, какие цифры я ввожу.

Sample output:
Enter First Numerator: 1
Enter First Denominator: 2
Enter Second Numerator: 1
Enter Second Denominator: 4
-------------------------
0/00 + 0/00 = 0/00

Пожалуйста, посмотрите на мой код и скажите, в чем проблема?

#include <iostream>
using namespace std;

class Fraction
{
private:
int numerator;
int denominator;
public:
Fraction()
{
numerator = 0;
denominator = 0;
}
public:
void set(int n, int d) {n = numerator; d = denominator;};
int getNumerator() {return numerator;};
int getDenominator() {return denominator;};
Fraction addTo(Fraction &frac2, Fraction& frac3);
int print() { cout << numerator << "/" << denominator; return 0;};
};
//Adds the value of the Fraction with the attached "addTo" method with the value of a second   specified Fraction and assigns the result to a third specified Fraction.
Fraction Fraction::addTo(Fraction& frac2, Fraction& addedTo)
{
frac2.numerator = (numerator * frac2.denominator) + (denominator * frac2.numerator);
frac2.denominator = (denominator * frac2.denominator);
frac2.numerator = addedTo.numerator;
frac2.denominator = addedTo.denominator;
return addedTo;
}

int main()
{
Fraction frac1, frac2, frac3;
int n1, n2, d1, d2;

//Prompts the user for data and then assigns it to the correct variables.
cout << "Enter First Numerator: ";
cin >> n1;

cout << "Enter First Denominator: ";
cin >> d1;

cout << "Enter Second Numerator: ";
cin >> n2;

cout << "Enter Second Denominator: ";
cin >> d2;

frac1.set(n1, d1);
frac2.set(n2, d2);

frac1.addTo(frac2, frac3);

//Formats output.
cout<< "-------------------------\n"<< frac1.print() << " + " << frac2.print()<< " = " << frac3.print() << endl;
cout << "\n";

return 0;
}

-3

Решение

Вы ошиблись здесь:

int print() { cout << numerator << "/" << denominator; /* why to hell this method returns 0?! */ return 0;};

Просто напишите так:

void print() { cout << numerator << "/" << denominator; }; // this method doesn't need to return any value

И вы ошиблись здесь:

//Formats output.
cout<< "-------------------------\n"<< frac1.print() << " + " << frac2.print()<< " = " << frac3.print() << endl;
cout << "\n";

Вы можете просто написать:

// Formats output
frac1.print();
std::cout << " + ";
frac2.print();
std::cout << " = ";
frac3.print();

Да, конечно, вы можете попытаться создать метод, который возвращает дробь в виде строки, но вы должны затем преобразовать int в строку и использовать, например, stringstream, так что моя идея проще.

@РЕДАКТИРОВАТЬ

Вы не указали здесь значение числителей и знаменателей:

//Prompts the user for data and then assigns it to the correct variables.
cout << "Enter First Numerator: ";
cin >> n1;

cout << "Enter First Denominator: ";
cin >> d1;

cout << "Enter Second Numerator: ";
cin >> n2;

cout << "Enter Second Denominator: ";
cin >> d2;

Вы должны написать так:

//Prompts the user for data and then assigns it to the correct variables.
cout << "Enter First Numerator: ";
cin >> n1;
frac1.numerator = n1;

cout << "Enter First Denominator: ";
cin >> d1;
frac1.denominator = d1;

cout << "Enter Second Numerator: ";
cin >> n2;
frac2.numerator = n2;

cout << "Enter Second Denominator: ";
cin >> d2;
frac2.denominator = d2;

@ EDIT2

Я только что нашел новую ошибку, которую вы сделали. Вы должны написать метод add следующим образом:

//Adds the value of the Fraction with the attached "addTo" method with the value of a second
specified Fraction and assigns the result to a third specified Fraction.
Fraction Fraction::addTo(Fraction& frac2, Fraction& addedTo)
{
addedTo.numerator = (numerator * frac2.denominator) + (denominator * frac2.numerator);
addedTo.denominator = (denominator * frac2.denominator);
// frac2.numerator = addedTo.numerator; // this line was a mistake because you tried to set result's numerator again
// frac2.denominator = addedTo.denominator; // the same as above
return addedTo;
}
-1

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


По вопросам рекламы [email protected]