Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
41
Добавлен:
16.04.2013
Размер:
151.55 Кб
Скачать

Наследование.

Наследование (inheritance) – механизм получения нового класса из существующего. Существующий класс может быть дополнен или изменен для создания производного класса. Наследование – это мощный механизм повторного использования кода. С помощью наследования может быть создана иерархия родственных типов, которые совместно используют код и интерфейсы.

Многие полезные типы являются вариантами других, и часто бывает утомительно создавать для каждого из них один и тот же код. Производный класс наследует описание базового класса; затем он может быть изменен добавлением новых членов, изменением существующих функций-членов и изменением прав доступа. В полезности такой концепции можно убедиться на примере того, как таксономическая классификация компактно резюмирует большие объемы знаний. Скажем, располагая сведениями о понятии «млекопитающие» и зная, что и слон, и мышь являются млекопитающими, можно сделать из описания значительно более краткими. Основное базовое понятие содержит информацию о том, что млекопитающие – это теплокровные высшие позвоночные, вскармливающие своих детенышей молоком. Эта информация наследуется понятиями «мышь» и «слон», но подробно она изложена лишь однажды – в базовом понятии. В терминах С++ и слон, и мышь являются производными от базового класса млекопитающих.

С++ поддерживает виртуальные функции-члены (virtual member function). Это функции, объявленные в базом классе и переопределенные в производных классах. Иерархия классов, которая определена открытым наследованием, создает родственный набор пользовательских типов, на все объекты которых может указывать указатель базового класса. Получая доступ к виртуальной функции с помощью этого указателя, С++ выбирает надлежащее определение функции на этапе выполнения. Объект, на который направлен указатель, должен нести в себе информацию о типе, так чтобы его можно было распознать динамически; в этом заключается характерная особенность кода на С++. Каждый объект знает, как на него можно воздействовать. Такая форма полиморфизма называется чистым полиморфизмом (pure polymorphism).

Наследование полезно встраивать в программное обеспечение для того чтобы увеличить возможность повторного использования кода и обеспечит моделирование проблемы в естественных для нее понятиях. Вот ключевые элементы методологии объектно-ориентированного проектирования, связанные с наследованием:

Методология объективно-ориентированного проектирования

  1. Выбор надлежащей совокупности типов.

  2. Проектирование взаимосвязей между типами и применение наследования для использования общего кода.

  3. Использование виртуальных функций для полиморфной обработки родственных объектов.

Производный класс

Класс можно сделать производным от существующего с использованием следующей формы:

Class имя_класса :

(public | protected | private)opt имя_базового_класса

{

объявление членов

};

Ключевое слово Class как всегда можно заменить ключевым словом struct, если подразумевается, что все члены открыты. Одним из аспектов производного класса является видимость (открытость) его членов-наследников. Ключевые слова public, protected и private используются для указания того, насколько члены базового класса будут доступны для производного.

Ключевое слово protected введено для того, чтобы сохранить сокрытие данных для членов, которые должны быть доступны из производного класса, но в других случаях действуют как закрытые (private). Это промежуточная форма доступа между public и private.

Рассмотрим создание класса, представляющего студентов колледжа или университета:

Соседние файлы в папке Тельминов (мб)