Объектно-ориентированный язык программирования С++ в примерах. Сивохин А.В. - 70 стр.

UptoLike

Составители: 

typedef shape* sp; /*-определение простого имени типа; */
declare(gslist,sp); /*-макрогенерация типов для списка и */
/* его итератора; */
Сгенерированные типы с точностью до обозначения их имен
выглядят следующим образом:
struct sp_gslist:slist /*-циклический односвязный список; */
{ int insert(sp a) { return slist::insert(ent(a)); }
int append(sp a) { return slist::append(ent(a)); }
sp get() { return sp(slist::get()); }
sp_gslist(){}
sp_gslist(sp a):slist(ent(a)){}
};
struct sp_gslist_iter:slist_iterator
{ sp_gslist_iter(sp_gslist& s):
slist_iterator((slist&)s) {}
sp operator()()
{ return sp(slist_iterator::operator()()); }
};
sp_gslist shape_list;/*-определение списка фигур с пустым */
/* конструктором; */
Теперь необходимо определить общее понятие фигуры shape
таким образом,чтобы оно использовалось как базовый класс
всеми конкретными фигурами:линиями,прямоугольниками,кругами
и т.д.Причем манипулирование фигурой должно осуществляться
только через фиксированный интерфейс:
struct shape /*-определение понятия фигуры: */
{ shape(){ shape_list.append(this);}/*-конструктор,*/
/* осуществляющий включение вновь опреде- */
/* ляемой фигуры в конец списка; */
virtual point north() { return point(0,0); }
/*-север; */
70
 typedef shape* sp;       /*-определение простого имени типа;   */
 declare(gslist,sp); /*-макрогенерация типов для списка и       */
                          /* его итератора;                     */


 Сгенерированные типы с точностью до обозначения их имен
выглядят следующим образом:


 struct sp_gslist:slist /*-циклический односвязный список; */
        { int insert(sp a) { return slist::insert(ent(a)); }
             int append(sp a) { return slist::append(ent(a)); }
             sp   get()         { return sp(slist::get());      }
             sp_gslist(){}
             sp_gslist(sp a):slist(ent(a)){}
        };


 struct sp_gslist_iter:slist_iterator
        { sp_gslist_iter(sp_gslist& s):
                  slist_iterator((slist&)s) {}
             sp operator()()
                     { return sp(slist_iterator::operator()()); }
        };


 sp_gslist shape_list;/*-определение списка фигур с пустым */
                           /* конструктором;                    */


  Теперь необходимо определить общее понятие фигуры shape
таким образом,чтобы оно использовалось как базовый класс
всеми конкретными фигурами:линиями,прямоугольниками,кругами
и т.д.Причем манипулирование фигурой должно осуществляться
только через фиксированный интерфейс:


 struct shape /*-определение понятия фигуры:                    */
         { shape(){ shape_list.append(this);}/*-конструктор,*/
                     /* осуществляющий включение вновь опреде- */
                     /* ляемой фигуры в конец списка;           */
             virtual point north() { return point(0,0); }
                                                 /*-север;      */


                                70