Программирование >>  Программирование на языке c++ 

1 ... 9 10 11 [ 12 ] 13 14 15 ... 159


данные

функции

Интерфейс базового класса

данные базового класса

функции базового класса

данные производного класса

функции производного класса

I Интерфейс J базового класса 1 является частью I интерфейса I производного \ класса

Интерфейс vJlpoизвoд-. ного /класса

Рис. 1. 7. Принцип наследования обеспечивает общность интерфейса базовых и производных классов

использовать некоторые или все компоненты-данные базового класса. Почему иногда только некоторые? Потому, что здесь вводятся новые механизмы защиты данных базового класса: private - недоступен за пределами класса; protected - доступен в производном классе; public - доступен везде;

использовать без изменений некоторые или все компоненты-функции базового класса;

заменить старые версии функций базового класса новыми версиями тех же функций, определенных в производном классе. Обратим внимание на то, что здесь меняется реализация, но сохраняется интерфейс, а это очень важно;

ф- ввести новые данные в производный класс;

ф- ввести новые функции в производный класс. Интерфейс базового класса является частью интерфейса производного класса (рис. 1.7), т. е. через окно производного класса мы видим все, что доступно для наблюдения как в производном, так и в базовом классе.



: интерфейс

-базовый класс 1


интерфейс

Рис. 1. 8. Иллюстрация множественного наследования

Различают простое наследование (single inheritance) и множественное наследование (multiple inheritance). В первом случае производный Ю1асс имеет один базовый ютасс (см. рис. 1.7), а во втором он может иметь несколько базовых классов (рис. 1.8). Перечисленные выше принципы распространяются и на множественное наследование. Поэтому производный класс на рис. 1.8 можно рассматривать как класс, приобретающий все полезное из его п базовых классов. Соответственно все интерфейсы п базовых классов являются частями интерфейса производного класса.

Все основные вопросы, которые имеют отношение к наследованию, рассматриваются в гл. 4. При этом надо обратить внимание на следующие вопросы:

ф- конструирование и разрушение объектов базовых и производных классов;

>- использование виртуальных функций, которые могут быть определены в базовом классе и далее переопределены в производных классах;

♦ использование абстрактных классов, позволяющих описать базовые средства интерфейса (но не реализации) для иерархических подструктур, в которых они являются главными базовыми классами;

ф- реализация простого и множественного наследования;



-♦- управление доступом к компонентам базовых классов из производных классов. Выше было показано, что между базовым и производными классами существует взаимосвязь. Она выражается тем, что производный класс полностью наследует интерфейс его базового класса. Когда мы объявляем класс, то в соответствующем описании его используется понятие типа. Рассмотрим, например, класс массив - array. Элементами массива могут быть целые, вещественные, символьные и другие значения. Однако в этом случае надо объявить несколько классов, например:

class int array { ..................... };

class float array { ..................... };

class char array { ..................... };

Это утомительно и неэффективно. Гораздо проще передать в класс array тип в виде параметра и назначить ему конкретное значение типа лишь при описании соответствующих объектов. Эта идея реализована в объектно-ориентированных программах с помощью конструкции, называе-

мой template (шаблон).

Jl>peJ Bjrype2 J По аналогии с тем, как

класс описьшает тип для семейства объек-~Size~ тов, имеющих общие структуру и поведение, шаблон (template) описывает семейство клас-РисЛР. Пояснение принципа использова- ОВ, ПОДПадаюЩИХ ПОД ния шаблона (template) ЭТОТ ШаблОН (рИС. 1.9).

Шаблон - это плоская пластинка с прямоугольными окнами, через которые можно видеть часть описания класса и изменять только то, что видно, например:

template<class Т> array { ..................... };

объявление array<int> vi; описание массива типа int array<float> vf; описание массива типа float array<char> vc; описание массива типа char




1 ... 9 10 11 [ 12 ] 13 14 15 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика