Моделирование Виртуальной Вычислительной Системы.
 
Выпуск N26
home URL
автор рассылки: noonv (noonv[AT]narod[.]ru)
"Вернемся к нашей зеленой коробочке."
Виктор Пелевин. Зеленая коробочка

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

Сегодня подлежат к рассмотрению файлы 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

Счастливо!

[noonv@volodia noonv]$ logout

XIII

Рейтинг@Mail.ru
Хостинг от uCoz