Поэтому я должен написать программу, в которой числа и числа являются целочисленными членами-данными класса Fractions. У меня также должны быть функции-члены, которые могут отображать значения данных объекта, и перегруженная операторная функция для +. Моя программа говорит, что мои подписанные элементы имеют недопустимый тип данных, но я не знаю, как разрешить вторую дробь без них. Кто-нибудь знает, как я могу это исправить?
Мой код следующий:
#include <iostream>
#include <cmath>
using namespace std;
int a, b, c;
class Fractions
{
private:
int num;
int denom;
public:
Fractions(int=1, int=1);
void operator!(void) const;
Fractions operator+(const Fractions&) const;
};
Fractions::Fractions(int n, int d)
{
if( d != 0)
num= n;
denom= d;
}
Fractions Fractions::operator+(const Fractions& f) const
{
a= num/denom;
b= num[1]/denom[1];
c= a + b;
c= (num * denom[1]+ denom * num[1])/(denom * denom[1]);
return c;
}
int main()
{
return 0;
}
Вы объявили num
а также denom
как int
но в своей функции вы рассматриваете их как массивы: b= num[1]/denom[1];
Это не сработает. Что вы хотите сделать с этой линией b= num[1]/denom[1];
? Является ли идея делить на стоимость дроби, которую вы добавляете? Если так, может быть, то, что вы хотите, это: b = f.num/f.denom;
Моя алгебра не самая лучшая, но я не могу вспомнить использование деления при добавлении дробей, но это может быть другой вопрос (или я могу ошибаться).
Самая непосредственная проблема, которая вызывает указанную вами ошибку, связана с попыткой сделать:
b= num[1]/denom[1];
Вы инициализировали b, num и denom как int
не целочисленный массив. Но вы пытаетесь получить доступ к элементу чисел и чисел, как если бы они были массивами.
Либо инициализируйте массив целых чисел для каждого, либо удалите оператор доступа для них, чтобы исправить ошибку, но я не верю, что это даст вам желаемый результат.
То, как вы перегружаете оператор «+», не будет работать. Так как у вас есть оператор «+» как член, объект этого класса становится левой частью оператора, и то, что вы передаете (const Fractions& f)
становится правой стороной.
Вы не используете переменную ‘f’, которую вы передаете, и не затрагиваете элементы этого экземпляра. Все, что вы делаете, это изменяете некоторые глобальные переменные, которые действительно не нужны. Я рекомендую вам прочитать о перегрузке операторов, так как она кажется, вы не совсем понимаете, как это работает.