Каждый объект является конкретным представителем класса. Объекты одного класса имеют разные имена, но одинаковые по типам и внутренним именам данные. Объектам одного класса доступны одинаковые компонентные функции класса и одинаковые операции, настроенные на работу с объектами класса. Таким образом, класс выступает в роли типа (прототипа), позволяющего создавать нужное количество однотипных объектов.
Заимствованная у природы идея наследования решает проблему модификации поведения объектов и придает ООП исключительную силу и гибкость. Наследование позволяет практически без ограничений последовательно строить и расширять классы, созданные вами или кем-то еще. Начиная с самых простых классов, можно создавать производные классы по возрастающей сложности, что не только облегчает отладку, но и упрощает внутреннюю структуру классов.
Последовательное проведение в жизнь принципа наследования, особенно при разработке крупных программных проектов, хорошо согласуется с техникой нисходящего структурного программирования (от общего – к частному) и во многом иллюстрирует такой подход. При этом сложность кода программы в целом существенно снижается. Производный класс (потомок) наследует все компонентные элементы базового класса (родителя) и всех его предшественников в иерархии классов.
При наследовании базовый класс «обрастает» новыми компонентными данными и функциями. Создавая модель предметной области, программист обычно подбирает наиболее подходящие классы (класс) для решения конкретной задачи и создает одного или нескольких потомков от них, которые приобретают способность делать не только то, что заложено в родительских классах. Дружественные функции позволяют производному классу получить доступ ко всем членам данных внешних классов.
Производный класс может наследовать элементы – данные и функции-элементы одного или нескольких базовых классов (основного или промежуточных). При этом функции-элементы могут быть переопределены (виртуальные функции) или перегружены в производном классе с целью изменения алгоритма поведения объекта производного класса относительно объектов базового класса.
В производном классе могут быть дополнительно объявлены данные и функции, расширяющие структуру объекта и его поведение.
Наследование может быть простым, множественным и виртуальным.
Таким образом, в ходе наследования:
1. Создается новый тип класса на основе одного или нескольких ранее созданных;
2. Новый тип (производный класс) наследует компонентные элементы базового класса;
3. При наследовании могут быть добавлены новые элементы;
4. Отдельные элементы базового класса (закрытые) не доступны в производном классе;
5. Наследуемые функции-элементы могут быть изменены в производном классе с использованием технологий перегрузки и переопределения.
Таким образом, объекты производного класса могут существенно отличаться от объектов базового класса как в сторону увеличения свойств и методов, так и в сторону их уменьшения. Однако основное назначение наследования – развитие.
Синтаксис определения производного класса следующий:
class имя_производного_класса: [ ключ_доступа ] имя_базового_класса
{описание элементов производного класса };
Ключ доступа позволяет изменить статус наследуемых элементов базового класса с точки зрения их доступности в производном классе. Ключ доступа – это одно из трёх ключевых слов: private, protected или public.