КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Синтаксис объявления класса TTreeNodetemplate <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
|