Матрица объектов на С++

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;
}

ppplva

Хм. Она даже не компилируется.
@@ -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);

123anna

мб вместо
*Matrix = new (brick*)[size*size];
имелось в виду
Matrix = new (brick*)[size*size];
?
А вообще программа страшна как атомная война

prehack

Страшна? Почему?
Matrix = new (brick*)[size*size] - не получиться, т.к. Matrix это brick**, а не brick*.
Вообще я не отец С++, надо просто прогу срочно сдать.
А хотелось создать класс Matrix_brick, чтобы к его объектам можно было обращаться как к двумерному массиву - Matrix_brick(ij) - возвращал объект класса brick, для этого я и перегрузил оператор .

buka

Интересно получается: * Matrix компилятор сам в памяти разместит?

buka

Я имел в виду, что для меня тайна, куда присваивание «*Matrix = new (brick*)[size*size];» запись производит.

prehack

Не знаю
Но как мне сделать так, чтобы получить матрицу Matrix, чтобы к ней можно было обращаться Matrix(i,j) и получать доступ к объекту brick?

rosali

Плз, в Study

Bird_V


*Matrix = new (brick*)[size*size];

Лучше

Matrix = (brick**) new brick* [size*size];

123anna

Страшна? Почему?
Наверное от тебя хотели матрицу объектов, а у тебя в массиве лежат указатели, а объекты заводятся отдельно, в данном случае ненужно. Далее классы, которые ты завел (с такими конструкторами особенно) малоосмыслены и не пригодны к использованию в отрыве от твоей программы, это является тяжким извращением идеи ООП. Если ты не обязан использовать классы лучше не используй, а если задание именно на это, то я бы не принял. Еще не забудь про очистку памяти.
Matrix = new (brick*)[size*size] - не получиться, т.к. Matrix это brick**, а не brick*.
А new (brick*)[size*size] по твоему имеет тип brick* что ли? Мне на самом деле интересно, ты попробовал/поразмышлял прежде чем отвечать?
Вообще я не отец С++, надо просто прогу срочно сдать.
Верю. В Study. Кстати современные компиляторы довольно понятно пишут в чем именно ошибка (в таких простых случаях) и тогда лучше самому пытаться разобраться.

margadon

А почему
Matrix = (brick**) new brick* [size*size];
а не
Matrix = (brick**) new brick* [size];
?

Bird_V

Ну описался...

margadon

Звиняюсь, я просто не тому ответил =)

ppplva

Потому что это будет уже совсем другая программа

margadon

Извиняюсь, ступил. Думал, раз там двойной указатель, то для массива массивов
Оставить комментарий
Имя или ник:
Комментарий: