- •Наследование. Абстрактные классы. Виртуальные функции Контейнерные классы
- •Наследование
- •Простое наследование
- •Спецификаторы доступа базовых классов
- •Порядок вызова конструкторов
- •Порядок вызова деструкторов
- •Разрешение области видимости
- •Теперь вызов функции b.Fin1() приведет к вызову функции fun() класса a. Динамическое связывание в ооп (полиморфизм)
- •Наследование и таблица виртуальных функций
- •Абстрактные базовые классы
- •Виртуальные деструкторы
- •Механизм работы позднего связывания
- •Чистые виртуальные деструкторы
- •Виртуальные функции в деструкторах
- •Перегруженные функции при динамическом связывании
- •Множественное наследование
- •Что необходимо знать
- •Задания
Что необходимо знать
Наследование представляет собой способность производить новый класс из существующего базового класса.
Когда вы порождаете один класс из другого (базового класса), производный класс наследует элементы базового класса.
Для порождения класса из базового начинайте определение производного класса ключевым словом class, за которым следует имя класса, двоеточие и имя базового класса, например class dalmatian: dog.
Когда вы порождаете класс из базового класса, производный класс может обращаться к общим элементам базового класса, как будто эти элементы определены внутри самого производного класса. Для доступа к частным данным базового класса производный класс должен использовать интерфейсные функции базового класса.
Внутри конструктора производного класса ваша программа может вызвать конструктор базового класса, указывая двоеточие, имя конструктора базового класса и соответствующие параметры сразу же после заголовка конструктора производного класса.
Чтобы обеспечить производным классам прямой доступ к определенным элементам базового класса, в то же время защищая эти элементы от оставшейся части программы, C++ обеспечивает защищенные (protected) элементы класса. Производный класс может обращаться к защищенным элементам базового класса, как будто они являются общими. Однако для оставшейся части программы защищенные элементы эквивалентны частным.
Если в производном и базовом классе есть элементы с одинаковым именем, то внутри функций производного класса C++ будет использовать элементы производного класса. Если функциям производного класса необходимо обратиться к элементу базового класса, вы должны использовать оператор глобального разрешения, например base class:: member.
Полиморфный объект может изменять форму во время выполнения программы. Вы создаете полиморфные объекты, используя классы, порожденные от существующего базового класса.
В базовом для полиморфного объекта классе вы должны определить одну или несколько функций как виртуальные (virtual).
В общем случае полиморфные объекты отличаются использованием виртуальных функций базового класса.
Для создания полиморфного объекта вам необходимо создать указатель на объект базового класса.
Для изменения формы полиморфного объекта вы просто направляете указатель на различные объекты, присваивая новый адрес объекта указателю на полиморфный объект.
Чисто виртуальная функция — это виртуальная функция базового класса, для которой в базовом классе не определены операторы. Вместо них базовый класс присваивает такой функции значение 0.
Производные классы должны обеспечить определение функции для каждой чисто виртуальной функции базового класса.
Множественное наследование является способностью порожденного класса наследовать характеристики нескольких базовых классов.
Для порождения класса из нескольких базовых после имени нового класса и двоеточия вы указываете имена базовых классов, разделяя их запятыми, например class cabbit: public cat, public rabbit.
При определении конструктора производного класса вы можете вызвать конструкторы всех базовых классов, передавая им необходимые параметры.
