Матрица объектов на С++
@@ -1,4 +1,5 @@
-
+#include <iostream>
+using namespace std;
class brick
{
public:
@@ -29,11 +30,11 @@
Matrix_brick::Matrix_brick(int size)
{
this -> size = size;
-*Matrix = new (brick*)[size*size];
+Matrix = new (brick*)[size*size];
for(int j=0; j < size*size; j++)
Matrix[j]= new brick(j,size);
};
-void main
+main
{
int size = 4;
Matrix_brick br(size);
*Matrix = new (brick*)[size*size];
имелось в виду
Matrix = new (brick*)[size*size];
?
А вообще программа страшна как атомная война
Matrix = new (brick*)[size*size] - не получиться, т.к. Matrix это brick**, а не brick*.
Вообще я не отец С++, надо просто прогу срочно сдать.
А хотелось создать класс Matrix_brick, чтобы к его объектам можно было обращаться как к двумерному массиву - Matrix_brick(ij) - возвращал объект класса brick, для этого я и перегрузил оператор .
Интересно получается: * Matrix компилятор сам в памяти разместит?
Я имел в виду, что для меня тайна, куда присваивание «*Matrix = new (brick*)[size*size];» запись производит.
Но как мне сделать так, чтобы получить матрицу Matrix, чтобы к ней можно было обращаться Matrix(i,j) и получать доступ к объекту brick?
Плз, в Study
*Matrix = new (brick*)[size*size];
Лучше
Matrix = (brick**) new brick* [size*size];
Страшна? Почему?Наверное от тебя хотели матрицу объектов, а у тебя в массиве лежат указатели, а объекты заводятся отдельно, в данном случае ненужно. Далее классы, которые ты завел (с такими конструкторами особенно) малоосмыслены и не пригодны к использованию в отрыве от твоей программы, это является тяжким извращением идеи ООП. Если ты не обязан использовать классы лучше не используй, а если задание именно на это, то я бы не принял. Еще не забудь про очистку памяти.
Matrix = new (brick*)[size*size] - не получиться, т.к. Matrix это brick**, а не brick*.А new (brick*)[size*size] по твоему имеет тип brick* что ли? Мне на самом деле интересно, ты попробовал/поразмышлял прежде чем отвечать?
Вообще я не отец С++, надо просто прогу срочно сдать.Верю. В Study. Кстати современные компиляторы довольно понятно пишут в чем именно ошибка (в таких простых случаях) и тогда лучше самому пытаться разобраться.
Matrix = (brick**) new brick* [size*size];
а не
Matrix = (brick**) new brick* [size];
?
Ну описался...
Звиняюсь, я просто не тому ответил =)
Потому что это будет уже совсем другая программа
Извиняюсь, ступил. Думал, раз там двойной указатель, то для массива массивов
Оставить комментарий
prehack
Пытаюсь создать матрицу из объектов класса brick размера sizeхsize - ничего не получается, прога вылетает. Где ошибка? Помогите кто знает...class brick
{
public:
brick(int j, int size);
int x,y;
};
brick::brick(int j, int size)
{
this->x = (int)j / size;
this->y = (int)j % size;
};
class Matrix_brick
{
public:
int size;
Matrix_brick(int size);
brick **Matrix;
brick* operator (int i,int j);
};
brick* Matrix_brick:: operator (int i,int j)
{
return Matrix[i*size+j];
}
Matrix_brick::Matrix_brick(int size)
{
this -> size = size;
*Matrix = new (brick*)[size*size];
for(int j=0; j < size*size; j++)
Matrix[j]= new brick(j,size);
};
void main
{
int size = 4;
Matrix_brick br(size);
cout << br(1,1)->x << ' ';
cout << br(1,1)->y << ' ';
cout << endl;
}