Странное поведение при перегрузке операторов [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Странное поведение при перегрузке операторов [закрыто]

Сообщение Anonymous »

Я не очень хорошо знаком с языком C++, но изучаю его для структур данных в колледже. Мой учитель задал создание связного списка многочленов, каждый узел должен иметь основание и показатель степени, кроме указания на голову, одно из требований - перегрузка операторов +,-,*,+=,-= и *=, я выполнил перегрузку, но при перегрузке умножения наблюдаю странное поведение.

Код: Выделить всё

#pragma once

#include 
#include 
using namespace std;
class NoPolinomio
{
private:
int base;
int potencia;
NoPolinomio* proximo;

public:
NoPolinomio(int b, int p) {
base = b;
potencia = p;
proximo = nullptr;
}

NoPolinomio* getProximo() {
return proximo;
}
void setProximo(NoPolinomio* p) {
proximo = p;
}
int getBase() {
return base;
}
void setBase(int p) {
base = p;
}
int getPotencia() {
return potencia;
}
void setPotencia(int p) {
potencia = p;
}

NoPolinomio& operator+=(NoPolinomio& no) {
if (potencia == no.getPotencia()) {
base += no.getBase();
}

return *this;

}

NoPolinomio operator+(NoPolinomio& no) {
if (potencia != no.getPotencia()) {
return *this;
}
return NoPolinomio(base + no.getBase(), potencia);
}

bool operator==(NoPolinomio& no) {
return (base == no.getBase() && potencia == no.getPotencia());
}

friend ostream& operatorgetPotencia();
final.Inserir(baseFinal, potenciaFinal);
atual2 = atual2->getProximo();
}
atual = atual->getProximo();
}
*this = final;
return *this;
}

ListaPolinomio operator*(ListaPolinomio&  lista2) {
ListaPolinomio final;

NoPolinomio* atual = lista2.getHead();
while (atual != nullptr) {
NoPolinomio* atual2 = lista2.getHead();
while (atual2 != nullptr) {
int baseFinal = atual->getBase() * atual2->getBase();

int potenciaFinal = atual->getPotencia() + atual2->getPotencia();
final.Inserir(baseFinal, potenciaFinal);

atual2 = atual2->getProximo();
}
atual = atual->getProximo();
}
return final;
}
};

int main() {
ListaPolinomio lista;
ListaPolinomio lista2;
lista.Inserir(2, 2);
lista.Inserir(2, 8);
lista.Inserir(2, 3);
lista2.Inserir(4, 3);
lista2.Inserir(-2, 4);

//lista*=lista2;
//ListaPolinomio lista3 = lista * lista2;
lista = lista * lista2;

return 0;
}
Я столкнулся с 3 ситуациями при тестировании перегрузки в main
  • создал новый список и получил умножение двух других
  • используйте *= в списке, умножая его на другой
  • используйте тот же список, чтобы умножать его на другой
Два первых случая, которые прокомментированы в примере, работают нормально, но последний случай выдает мне ошибку и программа никогда не закрывается сама по себе.
Изображение


Подробнее здесь: https://stackoverflow.com/questions/792 ... verloading
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»