Производные классы предоставляют простой и эффективный аппарат задания для класса альтернативного
интерфейса и установления класса путем добавления
возможностей к уже существующему классу без перепрограммирования или перекомпиляции. С помощью
производных классов возможно и обеспечить общий интерфейс для определенных классов так, чтобы другие
части программы работали с объектами этих классов
одинаковым образом. При этом чаще всего в каждый
объект закладывается информация о типе, чтобы эти
объекты могли обрабатываться в ситуациях, когда их тип
невозможно определить во время компиляции. Для
простой и надежной обработки таких динамических зависимостей типов вводится понятие виртуальной функции. По сути, производные классы применяются для того, чтобы облегчить формулировку общности.
Рассмотрим процесс написания средства общего
назначения, которое будет использоваться в различных
обстоятельствах. Ясно, что таких средств множество
и выгоды от их стандартизации огромны. В большой
программе вполне может быть много копий похожих
частей кода для работы с такими фундаментальными
понятиями.
Причина подобного хаоса частично заключается
в том, что представить такие общие понятия в языке
программирования не просто с концептуальной точки
зрения. Кроме того, средства, которые обладают достаточной общностью, налагают дополнительные расходы по памяти и-или по времени, в результате чего
делает их неудобными для самых простых и наиболее напряженно используемых средств, где они были
бы полезны. Понятие производного класса в C++
не обеспечивает общего решения всех рассмотренных
проблем, но оно определяет способ справляться с довольно небольшим числом важных случаев.
Написание общецелевых средств является сложной задачей, и часто основной акцент в их разработке другой, чем при разработке программ специального назначения.
Нет четкой границы между средствами
общего и специального назначения, и к методам
иязыковым средствам можно относиться так, будто они являются более полезными связи с ростом объема и сложности создаваемых программ.
Покажем построение программы, которая имеет
дело с людьми, работающими в некоторой компании.
Структура данных в такой программе может быть, например:
struct employee { -- служащий
char* name; -- имя
short age; -- возраст
short department; -- подразделение
int salary; --
employee* next;
-- ...
};