класс — Перегрузка оператора + переполнение стека

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

1

Решение

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

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

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

3

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

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

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

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

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

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

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

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector