Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2011, 19:19   #1
WIN32APIist
Пользователь
 
Регистрация: 05.12.2010
Сообщений: 14
По умолчанию Создание группы классов

У меня есть ячейки на плоскости с координатами x,y.Пытаюсь создать группу объектов этих ячеек. Как правильно выделить память и записать указатели на эти объекты в массив указателей?
Код:
// Расчет.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"

class Cell {
public :
	int x,y,z;
	double value;
	Cell(int xv,int yv,int zv,double value_v) {
		x=xv;
		y=yv;
		z=zv;
		value=value_v;
	};
};
int nx,ny;

int _tmain(int argc, _TCHAR* argv[])
{
	int i,j;
	Cell* ptr=new Cell[nx,ny];
	char *buffer = new char[sizeof(Cell)*nx*ny];
	for (i=1;i<=nx;i++) {
		for (j=1;j<=ny;j++) {
			ptr[i][j]=new (buffer) Cell(i,j,0);
		};
	};
	//Cell *cells=(Cell*) buffer;


	return 0;
}
WIN32APIist вне форума Ответить с цитированием
Старый 09.01.2011, 21:10   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

С++ не умеет динамические двумерные массивы, посему придётся выкручиваться посредством одномерного.
Код:
Cell **ptr = new Cell**[nx*ny];
for (int i = 0; i < nx*ny; ++i)
  ptr[i] = new Cell(i/nx, i%nx, 0);
с i/nx i%nx мог наврать. Тут думать надо как правильно преобразовать индекс одномерного массива в два индекса матрицы.
pu4koff вне форума Ответить с цитированием
Старый 09.01.2011, 21:38   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а массив массивов не катит?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.01.2011, 21:41   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а массив массивов не катит?
Да уж... вот что значит забросил программирование. Мозг вообще не варит
Код:
Cell ***ptr = new Cell**[nx];
for (int i = 0; i < nx; ++i)
{
  ptr[i] = new Cell*[ny];
  for (int j = 0; j < ny; ++j)
  {
    ptr[i][j] = new Cell(i, j, 0);
  }
}
pu4koff вне форума Ответить с цитированием
Старый 10.01.2011, 08:58   #5
WIN32APIist
Пользователь
 
Регистрация: 05.12.2010
Сообщений: 14
По умолчанию

А почему так ?
++j
++i
а нет так
j++
i++
WIN32APIist вне форума Ответить с цитированием
Старый 10.01.2011, 09:43   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от WIN32APIist Посмотреть сообщение
А почему так ?
++j
++i
а нет так
j++
i++
Просто внутри i++ и j++ будет создаваться временная переменная, т.е. лишние телодвижения будут. Для int это не критично, а вот если на его месте будет большой тяжелый класс, то уже сильно ударит по производительности. Лучше привыкать писать ++i везде, где это возможно, ну а уж где нужно именно i++, то его
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание классов в Pascal lara-lara Помощь студентам 10 28.10.2010 20:04
Создание массива классов. Кипящий чайник Общие вопросы C/C++ 18 29.08.2010 19:55
Создание пользователя рабочей группы Eseniya Microsoft Office Excel 5 28.12.2009 20:17
Создание классов и использование объектов классов при написании программ в среде C++. Frozen inside Помощь студентам 0 16.04.2009 23:18