Глава 20. Наследование и полиморфизм__________________________547

Какие же "классы" в нашей машиностроительной фирме будут отражать множественное наследование? Очевидный претендент — это начальник инженерного отдела, производный от двух базовых классов — класса инженер и класса руководитель. Унаследовать структуру и поведение от нескольких базовых классов так же просто, как и от одного. Предполагая, что мы создали классы Engineer (инженер) и Manager (руководитель), можно определить класс EngineeringManager (начальник инженерного отдела) следующим образом:

class EngineeringManager: public Engineer, public Manager

{ ' • . ,

public:

EngineeringManager() ;

virtual -EngineeringManager();

void SetDepartmentNumber(long);

long GetDepartmentNumber() ;

private: * long departmentNumber;

};

В результате мы объединили структуры и функции классов Engineer и Manager В класс EngineeringManager, адаптировав При этом класс EngineeringManager так, чтобы он содержал номер отдела, которым управляет начальник отдела.

До сих пор наши классы-примеры были довольно тривиальны. Мы сконструировали иерархию внутри нашей воображаемой системы моделирования отношений персонала с самого начала, что позволило нам воспользоваться преимуществами совместно используемых структур и поведения, как показано выше. Однако мы все же написали весь код собственноручно. Это, быть может, код меньшего размера, чем мы бы написали без наследования, но все же нам пришлось выполнить значительный объем работы. Наследование действительно эффективно, когда есть возможность производить новые классы от уже существующих, что, конечно, означает многократное использование программного кода.

Итак, откуда брать эти существующие классы? Вы, вероятно, уже знакомы с некоторыми из них, если в какой-то мере пользовались Borland C++. Что вы думаете по поводу классов, составляющих OWL? Это целая библиотека классов, охватывающая большую часть Windows API. Она включает классы для окон диалога, кнопок, полос прокрутки, всего, что вам нужно для создания своего очередного приложения для Windows. Просто унаследуйте свой класс, настроив его под собственные нужды! То же относится и ко всем классам C++. Если вы используете библиотеку классов Microsoft Foundation Classes (MFC) или приобрели библиотеку C++ другой фирмы и вам нужно настроить ее под свои потребности, просто унаследуйте новый класс из существующего, добавляя или перегружая требуемые функции. Кстати, мы