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