Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Моделирование Виртуальной Вычислительной Системы.


Информационный Канал Subscribe.Ru

Моделирование Виртуальной Вычислительной Системы.
 
Выпуск N25
home URL
автор рассылки: noonv (noonv[AT]narod[.]ru)
" Это была удивительная страна. Поперек бежали прямые ручейки, а аккуратные живые изгороди делили пространство между ручейками на равные квадраты.
- По-моему, Зазеркалье страшно похоже на шахматную доску, - сказала наконец Алиса. - Только фигур почему-то не видно... А, впрочем, вот и они! - радостно закричала она, и сердце громко забилось у нее в груди.
- Здесь играют в шахматы! Весь этот мир - шахматы (если только, конечно, это можно назвать миром)! Это одна большая-пребольшая партия."
Льюис Кэрролл. Алиса в Зазеркалье

Приветствую вас, уважаемые читатели!


Я получил e-mail от Andrew Ezhguroff c критикой оформления рассылки:
"Рассылка оформлена так, что читать ее вообще невозможно."
Замечание справедливо и с этого выпуска рассылка будет выходить в чуть более светлом формате.
Спасибо за замечание, Андрей.


В предыдущем выпуске был приведён файл main.h проекта и теперь мы будем постепенно рассматривать файлы, которые он включает. Файл definitions.h был рассмотрен в 23-ем выпуске, поэтому сегодня рассмотрим файлы field.h и field.cpp, которые вместе с файлами definitions.h и main.h находятся в каталоге src.



//////////////////////////////////////////////////////////////////////
//
// field.h
//
// for world field
//
//
//                                                    XIII
//////////////////////////////////////////////////////////////////////

#ifndef _FIELD_H_
#define _FIELD_H_

#include "definitions.h"
#include "box.h"

class FIELD
{
public:
 FIELD(); // set default size
 FIELD(FSize x_size,FSize y_size,FSize z_size);
 ~FIELD();
// variables
 FSize SizeX; // size of world
 FSize SizeY;
 FSize SizeZ;
 BOX *World; // Hello World! =) 
// functions
 void init(); // initialize World
 bool AllocateWorldMemory(); // get memory for World
 void FreeWorldMemory(); // free memory for World
 BOX* GetBox(FSize x_,FSize y_,FSize z_); // return the BOX by coordinates
};

#endif





//////////////////////////////////////////////////////////////////////
//
// field.cpp
//
// for world field
//
//
//                                                    XIII
//////////////////////////////////////////////////////////////////////

#ifndef _FIELD_CPP_
#define _FIELD_CPP_

#include "field.h"

FIELD::FIELD()
{
 World=NULL;
 SizeX=DEFAULT_X_SIZE;
 SizeY=DEFAULT_Y_SIZE;
 SizeZ=DEFAULT_Z_SIZE;
}
FIELD::FIELD(FSize x_size,FSize y_size,FSize z_size)
{
 World-NULL;
 SizeX=x_size;
 SizeY=y_size;
 SizeZ=z_size;
}
FIELD::~FIELD()
{
 FreeWorldMemory();
}
void FIELD::init()
{
 // initialize World

 bool temp=AllocateWorldMemory();
 if(!temp)
  printf("Cant allocate memory for World\n");
}
bool FIELD::AllocateWorldMemory()
{
 // get memory for World if OK return true

 World=new BOX[SizeX*SizeY*SizeZ];
 if(!World)
  return false;
 else
  return true;
}
void FIELD::FreeWorldMemory()
{
 // free memory for World
 if(World)
 {
  delete []World;
  World=NULL;
 }
}

BOX* FIELD::GetBox(FSize x,FSize y,FSize z)
{
 // return the BOX with coordinates x,y,z
 return &World[_XYZ_(x,y,z)];
}

#endif //_FIELD_CPP_



Как видите описывается класс FIELD(ПОЛЕ), в котором определяются размеры поля (типа FSize(см definitions.h)) по x,y и z (SizeX,SizeY и SizeZ соответственно).
Само ПОЛЕ - это одномерным массив элементов типа BOX(КОРОБКА :) (который определён в файле box.h).

Описывается два конструктора; конструктор по умолчанию устанавливает размеры ПОЛя по умолчанию (как они определены в definitions.h(SizeX=80, SizeY=20, SizeZ=1)). Второй конструктор принимает три параметра - размеры ПОЛя, которые будут установлены.

Так же стоит обратить внимание на то, что выделенныя память освобождается в деструкторе, но чтобы её выделить нужно вызвать функцию init().

Функция GetBox(FSize x,FSize y,FSize z), как Вы наверное уже догадались, возвращает указатель КОРОБки с координатами {x,y,z}.

Счастливо!

[noonv@volodia noonv]$ logout

XIII

Рейтинг@Mail.ru

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.vcm13
Отписаться

В избранное