Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Синтаксис объявления класса TTreeNode




template <class T>

class TTree;

 

template <class T>

class TTreeNode

{

private:

TTreeNode<T>* FParent;

T FData;

int FLevel;

vector<TTreeNode<T>*> Items;

int FCount;

TTreeNode(TTreeNode<T>* Parent, T Data);

TTreeNode<T>* AddChild(T Data);

TTreeNode<T>* InsertChild(int Index, T Data);

void DeleteChild(int Index);

~TTreeNode();

friend class TTree<T>;

};

Класс TTreeNode содержит поля FParent для хранения указателя на родительский узел, список дочерних узлов Items и количество FCount, уровень узла дерева FLevel и его данные FData. Конструктор присваивает новые данные узлу, включая родителя, а методы AddChild, InsertChild, DeleteChild добавляют, вставляют и удаляют дочерние узлы. Деструктор класса не только освобождает память от самого объекта, но и удаляет все его дочерние узлы.

В модуле с данным классом можно определить класс исключительных ситуаций EQueueError для обработки ошибок, которые могут возникать при работе с узлами дерева.

#define ETreeNodeError Exception

Чтобы использовать эти классы, в заголовочном разделе модуля с расширением h необходимо подключить модуль SysUtils.hpp, в котором хранить базовый класс исключительных ситуаций Exception.

После объявления класса TTreeNode необходимо определить все его методы в заголовочном разделе модуля с расширением h в соответствии с ADT – форматом.


 

После объявления класса необходимо определить все его методы в разделе implementation в соответствии с ADT – форматом.

 

template <class T>

TTreeNode<T>::TTreeNode(TTreeNode<T>* Parent, T Data)

{

FData = Data;

FParent = Parent;

if (Parent == NULL)

FLevel = 0;

Else

FLevel = Parent->FLevel+1;

FCount = 0;

}

 

template <class T>

TTreeNode<T>* TTreeNode<T>::AddChild(T Data)

{

TTreeNode<T>* NewNode;

NewNode = new TTreeNode<T>(this, Data);

Items.push_back(NewNode);

FCount++;

return NewNode;

}

 

template <class T>

TTreeNode<T>* TTreeNode<T>::InsertChild(int Index, T Data)

{

if ((Index < 0) && (Index >= FCount))

throw ETreeNodeError("Неправильный номер элемента");

TTreeNode<T>* NewNode = AddChild(Data);

for (int i = FCount - 1; i > Index ; i--)

Items[i] = Items[i-1];

Items[Index] = NewNode;

}

 

template <class T>

void TTreeNode<T>::DeleteChild(int Index)

{

if ((Index < 0) && (Index >= FCount))

throw ETreeNodeError("Неправильный номер элемента");

delete Items[Index];

for (int i = Index; i < FCount - 1; i++)

Items[i] = Items[i+1];

Items.pop_back();

FCount--;

};

 

template <class T>

TTreeNode<T>::~TTreeNode()

{

for (int i = 0; i < FCount; i++)

delete Items[i];

}

ADT – формат класса TTree


Поделиться:

Дата добавления: 2015-08-05; просмотров: 108; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты