Перегрузка операторов и обработка массивов в переполнении стека

Я пишу компьютерную симуляцию Little Man и хочу перегрузить оператор индексирования [], Я создал класс с именем LMC и сделал следующее:

#include <iostream>

using namespace std;

class LMC
{
public:
LMC();
void display();
int& operator[](int index);
~LMC();
private:
int **array;
};

LMC::LMC()
{
array = new int*[100];
for(int i = 0; i < 100; i++)
{
array[i] = new int[3];
}
return array;
}

void LMC::display()
{
for(int i = 0; i < 100;i++)
{
for(int j = 0; j <3;j++)
{
array[i][j] = 0;
array[i][2] = i;
cout << array[i][j]<<" ";
}
cout << endl;
}
}
int& LMC::operator[](int index)
{
return array[index][2];
}

LMC::~LMC()
{
for(int i =0; i < 100 ; i++)
{
delete [] array[i];
}
delete [] array;
array = NULL;
}

int main()
{
LMC littleman;
while(true)
{
int mailbox;
int function;
cout << "What is Mailbox number?" << endl;
cin >> Mailbox;
cout << "What is the function you want to use?" <<endl;
cin >> finction;
//the function is numbers eg 444 and 698;
littleman.display();
littleman[Mailbox] = function;
}
return 0;
}

Я могу запустить программу без ошибок. Когда я утверждаю, что mailbox = 0 а также function = 123 это не проблема.

Это отображается:

0 0 0
1 0 0
2 0 0
3 0 0
//continuing to 99

Это отображение неверно. Должно отображаться следующее:

0 0 123
1 0 0
2 0 0
//continuing to 99

У меня есть логическая ошибка или я переопределяю массив для отображения оригинала и как я могу это исправить?

1

Решение

Эти строки

  array[i][j] = 0;
array[i][2] = i;

в LMC::display() уничтожить содержимое массива, который вы пытаетесь отобразить.

Кроме того, есть дополнительная точка с запятой в конце void LMC::display();поэтому ваш код не должен компилироваться.

0

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

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

  • в LMC() конструктор, у вас есть return array;, Конструкторы никогда ничего не возвращают (у них даже нет типа возврата), поэтому вы не можете использовать return в них.
  • после void LMC::display(), у тебя есть ;, что является ошибкой, потому что это не определение, а реализация. Вы должны опустить это и просто оставить void LMC::display() { <...> }
  • void LMC::display() отсутствует закрытие } в конце, прямо перед operator[],
  • в main() у вас есть опечатки в Mailbox (заглавная M в одном случае и обычная m в другом. В C +++ Mailbox а также mailbox являются разные переменные) и finction вместо функции.

Что касается вашей проблемы, вы переписываете значения массива в display() функция:

array[i][j] = 0;
array[i][2] = i;

Вот почему вы не видите никаких результатов.

0

По вопросам рекламы [email protected]