|
Программирование >> Программирование на языке c++
данные функции Интерфейс базового класса
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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |