"Вернемся к нашей зеленой коробочке."
Виктор Пелевин. Зеленая коробочка
|
Приветствую вас, уважаемые читатели!
Сегодня подлежат к рассмотрению файлы box.h и box.cpp .
//////////////////////////////////////////////////////////////////////
//
// box.h
//
// for class of the box (simplest element of field)
//
//
// XIII
//////////////////////////////////////////////////////////////////////
#ifndef _BOX_H_
#define _BOX_H_
#include "definitions.h"
#include "objects/element.h"
#include "objects/cell.h"
class BOX
{
public:
BOX();
~BOX();
// variables
ORGANIC *pOrganic;
INORGANIC *pInorganic;
// functions
void DelOrganic();
uchar NatureEvolution();
uchar CellEvolution();
void reset();
bool empty();
BOX& operator = (const BOX&);
private:
void init();
};
#endif //#ifndef _BOX_H_
|
//////////////////////////////////////////////////////////////////////
//
// box.cpp
//
// for class of the box (simplest element of field)
//
//
// XIII
//////////////////////////////////////////////////////////////////////
#ifndef _BOX_CPP_
#define _BOX_CPP_
#include "box.h"
BOX::BOX()
{
init();
}
BOX::~BOX()
{
DelOrganic();
if(pInorganic)
{
delete pInorganic;
pInorganic=NULL;
}
}
void BOX::DelOrganic()
{
if(pOrganic)
{
delete pOrganic;
pOrganic=NULL;
//##
}
}
uchar BOX::NatureEvolution()
{
return pInorganic->Evolution();
}
uchar BOX::CellEvolution()
{
if(pOrganic)
return pOrganic->Evolution();
return 0; //?
}
void BOX::reset()
{
//
// set all variables to 0
//
if(pInorganic)
pInorganic->reset();
if(pOrganic)
pOrganic->reset();
}
bool BOX::empty()
{
if(pOrganic)
return false;
else
return true;
}
BOX& BOX::operator = (const BOX& rhs)
{
if(this==&rhs)
return *this;
if(pInorganic && rhs.pInorganic)
*pInorganic=*(rhs.pInorganic);
if(pOrganic && rhs.pOrganic)
*pOrganic=*(rhs.pOrganic);
return *this;
}
void BOX::init()
{
pOrganic=NULL;
pInorganic=NULL;
}
#endif //#ifndef _BOX_CPP_
|
Итак, описывается класс BOX (КОРОБКА). Как видите, КОРОБКА содержит
два указателя - типа ORGANIC* и типа INORGANIC* , которые
указывают на ОРГАНИЧЕСКИЕ и НЕОРГАНИЧЕСКИЕ объекты в КОРОБКЕ соответственно.
На рисунке показано ПОЛЕ, состоящее из КОРОБОК:
<------ SizeX --------->
[] [] [] [] [] [] [] [] [] ^
[] [] [] [] [] [] [] [] [] |
[] [] [] [] [] [] [] [] [] SizeY
[] [] [] [] [] [] [] [] [] |
[] [] [] [] [] [] [] [] [] +
На картинке [] - является одной КОРОБКОЙ.
С КОРОБКОЙ связаны объекты: ОРГАНИЧЕСКИЙ и НЕОРГАНИЧЕСКИЙ.
Структура КОРОБКИ:
+---+ +~~~~~~~~~~+
|BOX|-->! ORGANIC !
+---+ ! !
| +~~~~~~~~~~+
|
| +~~~~~~~~~~~+
+--->! INORGANIC !
! !
+~~~~~~~~~~~+
|
Обратите внимание, что освобождение памяти, на которую указывают указатели (простите
за товтологию :) осуществляется в деструкторе, но выделяться она будет "вручную".
Функции КОРОБКИ просты:
init() - производит начальную инициализацию
DelOrganic() - удаляет КЛЕТКУ, связанную с КОРОБКОЙ
NatureEvolution() и CellEvolution() - вызывают функцию
развития (Evolution() ) для НЕОРГАНИЧЕСКОГО и ОРГАНИЧЕСКОГО объектов, связанных
с КОРОБКОЙ
reset() - сбрасывает переменные на ноль
empty() - возвращает true , если
КОРОБКА пуста - т.е. не содержит ОРГАНИЧЕСКОГО объекта, иначе возвращает false
Счастливо!
|