Матрица объектов на С++
@@ -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?

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