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

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


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

Моделирование Виртуальной Вычислительной Системы.
 
Выпуск 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

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

В избранное