Не могу понять почему перегрузка инкремента вызывает ошибку.
Перегрузка инкремента должна добавлять строку в начало массива.
http://pastebin.com/4k7BSLkJ
Другие языки программирования и технологии
C++ Помогите, не работает перегрузка
Потому, что
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;
}
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;
}
1. Какую ошибку?
2. Инкремент должен изменять объект, к которому применен.
2. Инкремент должен изменять объект, к которому применен.
Какая ошибка?
Похожие вопросы
- Написал калькулятор на c++ он не работает вот код
- C++ помогите начинающему ?
- Перевести C++ => C# Помогите пожалуйста!
- Связь Питона и C#. Помогите
- dev c++. помогите плз сделать задачу найти наибольшую высоту треугольника из сторонами a,b,c
- НОК 2-ух чисел - C++ Помогите, люди добрые. Как написать прогу на C++, которая вычисляет НОК двух чисел
- Что такое return в c# помогите
- C++ помогите пожалуйста! Без вашей помощи никак не получается
- C++ Двусвязные списки, работает не правильно программа
- Программисты C#, помогите. задачка элементарная
А в качестве пруфа - вот что получилось:
Или я чего-то не понимаю.
Исходный массив 4 строки по 5 столбиков. Чтобы добавить строку в начало массива, нужно создать динамический массив, на 1 строку больше.
А затем заполнить только не с нулевой строки, а с первой.