При попытке скомпилировать код выдает 'float fraction::numerator' is private|
То есть при перемещении float numerator; и float denominator; в public все работает, а должно работать и так.
#include <iostream>
using namespace std;
class fraction
{
private:
float numerator;
float denominator;
public:
void fadd(fraction, fraction);
void fsub(fraction, fraction);
void fmul(fraction, fraction);
void fdiv(fraction, fraction);
};
void fraction::fadd(fraction f1, fraction f2)
{
numerator = f1.numerator * f2.denominator + f1.denominator * f2.numerator;
denominator = f1.denominator * f2.denominator;
}
//---------------------------------------------------------------------------------------
void fraction::fsub(fraction f1, fraction f2)
{
numerator = f1.numerator * f2.denominator - f1.denominator * f2.numerator;
denominator = f1.denominator * f2.denominator;
}
//---------------------------------------------------------------------------------------
void fraction::fmul(fraction f1, fraction f2)
{
numerator = f1.numerator * f2.denominator;
denominator = f1.denominator * f2.numerator;
}
//---------------------------------------------------------------------------------------
void fraction::fdiv(fraction f1, fraction f2)
{
numerator = f1.numerator * f2.numerator;
denominator = f1.denominator * f2.denominator;
}
int main()
{
setlocale(LC_ALL, "Russian");
fraction f1, f2, fsum;
char ch = '/', zn;
do{
cout << "Введите первую дробь (a/b): ";
cin >> f1.numerator >> ch >> f1.denominator;
cout << "Введите арифметическое действие (+,-,/,*): ";
cin >> zn;
cout << "Введите вторую дробь (c/d): ";
cin >> f2.numerator >> ch >> f2.denominator;
switch (zn)
{
case '+': fsum.fadd(f1, f2); break;
case '-': fsum.fsub(f1, f2); break;
case '/': fsum.fmul(f1, f2); break;
case '*': fsum.fdiv(f1, f2); break;
}
cout << "Сумма: " << fsum.numerator << ch << fsum.denominator << endl;
cout << "Еще раз? (y/n): ";
cin >> ch;
} while (ch != 'n');
system("pause");
return 0;
}