7.2.1 Построение Производного Класса

7.2.1 Построение Производного Класса

Рассмотрим построение программы, которая имеет дело с людьми, служащими в некоторой фирме. Структура данных в этой программе может быть например такой:

struct employee (* // служащий char* name; // имя short age; // возраст short department; // подразделение int salary; // жалование employee* next; // ... *);

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

struct manager (* // менеджер employee emp; // запись о менеджере как о служащем employee* group; // подчиненные люди // ... *);

Менеджер также является служащим; относящиеся к служащму employee данные хранятся в члене emp объекта manager. Для читающего это человека это, может быть, очевидно, но нет нчего выделяющего член emp для компилятора. Указатель на мнеджера (manager*) не является указателем на служащего (employee*), поэтому просто использовать один там, где требется другой, нельзя. В частности, нельзя поместить менеджера в список служащих, не написав для этого специальный код. Моно либо применить к manager* явное преобразование типа, либо поместить в список служащих адрес члена emp, но и то и другое мало элегантно и довольно неясно. Корректный подход состоит в том, чтобы установить, что менеджер является служащим с некторой добавочной информацией:

struct manager : employee (* employee* group; // ... *);

manager является производным от employee и, обратно, employee есть базовый класс для manager. Класс manager допонительно к члену group имеет члены класса employee (name, age и т.д.).

Имея определения employee и manager мы можем теперь содать список служащих, некоторые из которых являются менеджрами. Например:

void f() (* manager m1, m2; employee e1, e2; employee* elist; elist = amp;m1; // поместить m1, e1, m2 и e2 в elist m1.next = amp;e1; e1.next = amp;m2; m2.next = amp;e2; e2.next = 0; *)

Поскольку менеджер является служащим, manager* может ипользоваться как employee*. Однако служащий необязательно является менеджером, поэтому использовать employee* как manager* нельзя.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

2.1. Построение документа

Из книги Единая система программной документации. ТРЕБОВАНИЯ К ПРОГРАММНЫМ ДОКУМЕНТАМ, ВЫПОЛНЕННЫМ ПЕЧАТНЫМ СПОСОБОМ автора Госстандарт СССР

2.1. Построение документа 2.1.1. При необходимости допускается делить документ на части. Деление на части осуществляется на уровне не ниже раздела. Каждую часть комплектуют отдельно. Всем частям присваивают обозначение документа в соответствии с ГОСТ 19.103-77.Части оформляют в


Построение кривых

Из книги ArchiCAD 11 автора Днепров Александр Г

Построение кривых Построение произвольных кривых осуществляется с помощью инструмента Spline (Сплайн), кнопка которого по умолчанию отсутствует в разделе Document (Документ) палитры инструментов. Активизировать этот инструмент можно, выполнив команду главного меню ArchiCAD Document


Построение стен

Из книги AutoCAD 2009 для студента. Самоучитель автора Соколова Татьяна Юрьевна

Построение стен Основные инструменты проектирования расположены в разделе Design (Проектирование) палитры ToolBox (Палитра инструментов). Для построения стен используется инструмент Wall (Стена) После щелчка кнопкой мыши на этом инструменте на информационной палитре появятся


Построение зон

Из книги ArchiCAD. Начали! автора Орлов Андрей Александрович

Построение зон Построение зон производится с помощью одного из трех методов, активизируемых кнопками, расположенными на информационной палитре и в окне настройки параметров зон.Кнопка Manual (Вручную) предназначена для создания произвольного контура зоны. Щелчок на ней


Построение сечений

Из книги 3ds Max 2008 для дизайна интерьеров автора Семак Рита

Построение сечений Команда SECTION осуществляет построение поперечного сечения тела в виде области или неименованного блока. Поперечное сечение – это пересечение плоскости и выбранного тела (рис. 17.2). Рис. 17.2. Построение сеченияЗапросы команды SECTION: Select objects: – выбрать


Построение эллипсов

Из книги AutoCAD 2009. Начали! автора Соколова Татьяна Юрьевна

Построение эллипсов Чтобы выбрать метод построения эллипсов, нужно нажать кнопку расположенную справа от кнопки построения дуг / окружностей. Внешний вид кнопки может меняться в зависимости от установленного метода построения. После нажатия кнопки на экране с


Построение полилиний

Из книги AutoCAD 2008 для студента: популярный самоучитель автора Соколова Татьяна Юрьевна

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


Построение кривых

Из книги C++ для начинающих автора Липпман Стенли

Построение кривых Произвольные кривые можно построить с помощью инструмента Spline (Сплайн), кнопка которого по умолчанию отсутствует в разделе Document (Документ) палитры инструментов. Чтобы активировать этот инструмент, нужно выполнить команду главного меню ArchiCAD Document ?


Построение стен

Из книги автора

Построение стен Геометрические методы построения стен выбираются с помощью следующих кнопок, расположенных в соответствующем разделе информационной палитры (см. рис. 5.2): – построение прямых и криволинейных стен с постоянным сечением; – построение стен с основанием в


Построение крыш

Из книги автора

Построение крыш ArchiCAD предоставляет проектировщику несколько методов построения скатов. Этим методам соответствуют следующие кнопки, расположенные на информационной палитре: – построение многоугольных скатов. Используется для проектирования крыш с формой скатов,


Построение объектов

Из книги автора

Построение объектов Моделирование с использованием стандартных объектов – основной метод создания моделей. Простые формы являются основой для создания сложных сетчатых оболочек, например сферу можно представить как заготовку для создания яблока, а немного изменив


Построение сечений

Из книги автора

Построение сечений Команда SECTION осуществляет построение поперечного сечения тела в виде области или неименованного блока. Поперечное сечение – это пересечение плоскости и выбранного тела (рис. 14.2). Рис. 14.2. Формирование сеченияЗапросы команды SECTION:Select objects: – выбрать


Построение сечений

Из книги автора

Построение сечений Команда SECTION осуществляет построение поперечного сечения тела в виде области или неименованного блока. Поперечное сечение – это пересечение плоскости и выбранного тела (рис. 17.2). Рис. 17.2. Изображение сеченияЗапросы команды SECTION: Select objects: – выбрать


17.4. Конструирование базового и производного классов

Из книги автора

17.4. Конструирование базового и производного классов Напомним, что объект производного класса состоит из одного или более подобъектов, соответствующих базовым классам, и части, относящейся к самому производному. Например, NameQuery состоит из подобъекта Query и объекта-члена


17.4.2. Конструктор производного класса

Из книги автора

17.4.2. Конструктор производного класса В классе NameQuery также определены два конструктора. Они объявлены открытыми, поскольку ожидается, что в приложении будут создаваться объекты этого класса:class NameQuery : public Query {public:explicit NameQuery( const string& );NameQuery( const string&, const vector* );// ...protected://