Другие языки программирования и технологии

C++ Помогите, не работает перегрузка

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

http://pastebin.com/4k7BSLkJ
Дмитрий
Дмитрий
2 560
Потому, что
for (int i = 1; i < row+1; i++)
{
for (int j = 0; j < column; j++)
{
temp.a[i][j] = this->a[i][j];
}
cout << endl;
}

В этом цикле Вы выходите за пределы массива a, т. к. в цикле i получается больше чем размерность старого массива a на 1
Более того, Вы потом забыли увеличить row

Про использование increment правильно заметил уважаемый Капитан Гугл =) а так, если оставлять в этом стиле:

#include <iostream>
#include <cstdlib>
using namespace std;
class My_Class
{
int row;
int column;
int** a;

public:
My_Class()
{
row = 4;
column = 5;

a = new int* [row];
for (int i = 0; i < row; i++)
{
a[i] = new int [column];
}

for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
{
a[i][j] = rand()% 50;
}
}
}

~My_Class()
{
for (int i = 0; i < row; i++)
{
delete [] a[i];
}
delete [] a;
}

My_Class operator++()
{
My_Class temp;
temp.a = new int* [row+1];
for (int i = 0; i < row+1; i++)
{
temp.a[i] = new int [column];
}
for (int i = 1; i < row+1; i++)
{
for (int j = 0; j < column; j++)
{
temp.a[i][j] = this->a[i-1][j];
}
cout << endl;
}
temp.row++;
return temp;
}

void Display()
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
{
cout << a[i][j] << ' ';
}
cout << endl;
}
}
};

int main()
{
My_Class Obj;
Obj.Display();

My_Class Obj2 = ++Obj; //добавить строчку в начало
Obj2.Display();
return 0;
}
Дмитрий Владимирович
Дмитрий Владимирович
84 764
Лучший ответ
Дмитрий Владимирович + по-мелочи rand надо инициализировать с srand.
А в качестве пруфа - вот что получилось:

Дмитрий Ну я же выделил память под еще одну строку массива? Потому у меня в новом массиве row на 1 больше.
Или я чего-то не понимаю.

Исходный массив 4 строки по 5 столбиков. Чтобы добавить строку в начало массива, нужно создать динамический массив, на 1 строку больше.

А затем заполнить только не с нулевой строки, а с первой.
1. Какую ошибку?
2. Инкремент должен изменять объект, к которому применен.
Какая ошибка?