Объектно-ориентированное программирование. Сивохин А.В - 53 стр.

UptoLike

53
основании которой компилятор сгенерирует классы, руководствуясь параметрами
настройки.
Пример:
// Фрагмент класса-шаблона TListed, реализующего список,
// элементами которого являются объекты класса T
template <class T>
class TListed
{ public: static T* getFirst () {return Head;}
static T* getNext (const T* I)
{return ((I)? ((TListed *)I)->Next: getFirst()); }
protected: TListed (): Next (0) {insert ();}
virtual ~TListed () {remove ();}
private: void insert ();
void remove ();
static T* Head; //Начало списка общее для всех объектов
T* Next; //Указатель на следующий объект
};
//Метод insert класса TListed
template <class T>
void TListed<T>::insert()
{ if (! getFirst()) { Head=(T*)this; } //первый элемент списка
else {T* x=getFirst(); //добавление в конец
while (getNext(x)) x=getNext(x);
((TListed<T>*)x)->Next=(T *)this;}
}
Библиотека классов языка Си++
Си++ располагает библиотекой классов, реализующих сложные структуры
данных: списки, очереди, деревья и т.д. Более подробно о библиотеке классов
можно прочесть в [6]. Далее будет рассмотрена задача использования библиотеки
классов для построения списка объектов класса TextPoint из лабораторной работы
7.
Для решения этой задачи необходимо, чтобы
класс TextPoint стал членом
иерархии классов. С этой целью TextPoint объявляется наследником класса Object.
Необходимо определить в TextPoint чистые виртуальные функции, наследуемые от
Object, иначе TextPoint будет абстрактным классом. После этого список объектов
TextPoint реализуется как объект ListOfPoints класса List.
Пример:
                                                                              53
основании которой компилятор сгенерирует классы, руководствуясь параметрами
настройки.
      Пример:
// Фрагмент класса-шаблона TListed, реализующего список,
// элементами которого являются объекты класса T
template 
class TListed
{ public: static T* getFirst () {return Head;}
        static T* getNext (const T* I)
        {return ((I)? ((TListed *)I)->Next: getFirst()); }
  protected: TListed (): Next (0) {insert ();}
          virtual ~TListed () {remove ();}
  private: void insert ();
         void remove ();
         static T* Head; //Начало списка общее для всех объектов
         T* Next; //Указатель на следующий объект
};
//Метод insert класса TListed
template 
void TListed::insert()
{ if (! getFirst()) { Head=(T*)this; } //первый элемент списка
  else {T* x=getFirst();          //добавление в конец
      while (getNext(x)) x=getNext(x);
      ((TListed*)x)->Next=(T *)this;}
}


                       Библиотека классов языка Си++
    Си++ располагает библиотекой классов, реализующих сложные структуры
данных: списки, очереди, деревья и т.д. Более подробно о библиотеке классов
можно прочесть в [6]. Далее будет рассмотрена задача использования библиотеки
классов для построения списка объектов класса TextPoint из лабораторной работы
№7.
    Для решения этой задачи необходимо, чтобы класс TextPoint стал членом
иерархии классов. С этой целью TextPoint объявляется наследником класса Object.
Необходимо определить в TextPoint чистые виртуальные функции, наследуемые от
Object, иначе TextPoint будет абстрактным классом. После этого список объектов
TextPoint реализуется как объект ListOfPoints класса List.
    Пример: