@Lenz007

Как изменить код, чтобы заработал?

При попытке скомпилировать код выдает '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;
}
  • Вопрос задан
  • 223 просмотра
Решения вопроса 1
PavelK
@PavelK
Нет, не должно.
Вы как раз в main пытаетесь получить приватное значение numerator и иже с ним.
Сделайте в таком случае геттер и сеттер, что бы по фен-шую.

P.S. все действия вместо явных функция можно было бы сделать через перегрузку операторов - так красивее =)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
maaGames
@maaGames
Погроммирую программы
f1.numerator и f1.denominator нельзя вызывать из привата. Сделай для них функции Get и Set в паблике и будет тебе счастье.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы