Перегрузите оператор сложения, чтобы добавить два многочлена

Я пытаюсь перегрузить оператор сложения, чтобы добавить два многочлена. Моя идея состоит в том, чтобы сделать многочлен в виде двух массивов, один для коэффициентов и один для показателей. Добавление двух полиномов — это просто объединение двух массивов в более длинный массив. Я только что изучил указатели и амперсанд, но не знаю, как их эффективно использовать. Я получил ошибки, говорящие, что «выражение должно быть модифицируемым lvalue».

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

#include <iostream>
#include "Polynomial.h"
using namespace std;

Polynomial::Polynomial(){

};

Polynomial Polynomial::operator + (const Polynomial &right) const
{
    Polynomial Sum;
    Sum.numberOfTerms = numberOfTerms + right.numberOfTerms;
    int i = static_cast<int>(numberOfTerms);
    int j = static_cast<int>(right.numberOfTerms);
    for (int n = 0; n > i && n <= n + j; n++) {
        coefficients[n] = right.coefficients[n]; //error saying expression must be a modifiable lvalue
        exponents[n] = right.exponents[n];
    }
    return Sum;
}

    void Polynomial::enterTerms() {
    int coefficient=0;
    int exponent=0;

    cout << "Enter number of terms for the polynomial:";
    cin >> numberOfTerms;

    for (int i = 0; i < numberOfTerms; i++) {
        cout << "Enter coefficient:\n";
        cin >>coefficient;
        coefficients[i] = coefficient;

        cout << "Enter exponent:\n";
        cin >> exponent;
        exponents[i] = exponent;
    }
}

void Polynomial::printPolynomial() const {
    //Print the first term out, if exponent is 0, just print out the     constant
    if (exponents[0] == 0) {
        cout << coefficients[0];
    }
    else{
        cout << coefficients[0] << "x^" << exponents[0];
    }

    //Print from the second term to the last term, including a "+" in front of each term
    for (int i = 1; i <= numberOfTerms; i++) {
        if (exponents[i] == 0) {
            cout <<"+"<< coefficients[i];
        }
        else {
            cout << "+"<<coefficients[i] << "x^" << exponents[i];
        }

    }
}

int Polynomial::getNumberOfTerms() const {
    return numberOfTerms;
}

int Polynomial::getTermCoefficient(int i) const {
    return coefficients[i];
}

int Polynomial::getTermExponent(int i) const {
    return exponents[i];
}

Это заголовочный файл

#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H
#include <array>
using namespace std;

class Polynomial {
public:
    static const int maxTerms = 100;

    Polynomial();

    Polynomial operator+(const Polynomial &)const;

void enterTerms();
    void printPolynomial() const;
    int getNumberOfTerms() const;
    int getTermExponent(int) const;
    int getTermCoefficient(int) const;

void setCoefficient(int, int);
//~Polynomial();


private:
    size_t numberOfTerms;
    array<int, maxTerms> exponents;
    array<int, maxTerms> coefficients;
    static void polynomialCombine(Polynomial &);
};
#endif

person Jovi Zhihao Zhou    schedule 28.10.2016    source источник


Ответы (1)


Вы объявили свой оператор + как const:

Polynomial Polynomial::operator + (const Polynomial &right) const
                                                            ^^^^^

что означает, что это-> коэффициенты [*] не могут быть изменены. т. е. вы создали объект Sum, но пытаетесь записать в *this вместо возвращаемого объекта Sum.

person Peeter Joot    schedule 28.10.2016
comment
Спасибо! Но можно ли в любом случае объединить два массива коэффициентов и показателей с объявлением оператора + как константы? - person Jovi Zhihao Zhou; 28.10.2016
comment
Вы можете использовать функцию, не являющуюся членом (возможно, объявленную как друга): Полиномиальный оператор + (const Polynomial &, const Polynomial &); - person Peeter Joot; 28.10.2016
comment
Но не является ли этот полиномиальный оператор + ( const Polynomial &, const Polynomial & ) другой функцией перегрузки оператора, принимающей два параметра? - person Jovi Zhihao Zhou; 28.10.2016
comment
Я уточнил свой ответ. - person Peeter Joot; 29.10.2016
comment
Теперь я понимаю! Спасибо! - person Jovi Zhihao Zhou; 29.10.2016
comment
У меня тут другая ошибка. Не могли бы вы мне помочь? ссылка - person Jovi Zhihao Zhou; 29.10.2016