Перегрузка оператора + С++

Итак, я должен написать программу, в которой num и denom являются целочисленными элементами данных класса 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;
}

person user3427349    schedule 17.03.2014    source источник
comment
num[1] и denom[1] будут недействительными, поскольку они не относятся к типу array.   -  person songyuanyao    schedule 17.03.2014


Ответы (2)


Вы объявили num и denom как int, но в своей функции вы обрабатываете их как массивы: b= num[1]/denom[1];

Это не сработает. Что вы хотите сделать с этой строкой b= num[1]/denom[1];? Идея разделить на значение дроби, которую вы добавляете? Если да, то, возможно, вы хотите: b = f.num/f.denom;

Моя алгебра не самая лучшая, но я не могу вспомнить, чтобы использовать деление при сложении дробей, но это может быть другой вопрос (или я могу ошибаться).

person jpw    schedule 17.03.2014

Самая непосредственная проблема, вызывающая указанную вами ошибку, вызвана попыткой сделать:

b= num[1]/denom[1];

Вы инициализировали b, num и denom как int, а не как целочисленный массив. Но вы пытаетесь получить доступ к элементу num и denom, как если бы они были массивами.

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

То, как вы перегружаете оператор «+», не сработает. Поскольку у вас есть оператор '+' в качестве члена, объект этого класса становится левой частью оператора, а то, что вы передаете (const Fractions& f), становится правой частью.

Вы вообще не используете переменную «f», которую вы передаете, и не влияете на члены этого экземпляра. Все, что вы делаете, — это изменяете некоторые глобальные переменные, которые на самом деле не нужны. Я рекомендую вам прочитать о перегрузке операторов, поскольку это кажется, вы не совсем понимаете, как это работает.

person Mio    schedule 17.03.2014