|
Программирование >> Программирование на языке c++
4. ПРОИЗВОДНЫЕ КЛАССЫ 4.1. Основные правила построения производных классов и работы с ними Производные классы являются эффективным средством для расширения функциональных возможностей существующих классов без перепрограммирования этих классов и повторной компиляции существующих программ. Под расширением функциональных возможностей здесь понимается добавление в существующий класс новых функций, изменение и усовершенствование старых функций, полная замена старых функций. Рассмотрим пример построения класса и производного класса. Предположим, мы хотим описать информацию о книгах. Тогда можно объявить следующий класс: class book { класс книга char* title; название книги char* language; на каком языке написана книга int price; цена книги int year published; год опубликования книги ............... }; Теперь объявим другой класс, который назовем руководство программистов (programmers guide): class programmers guide { int level; каким уровнем знаний должен обладать программист, чтобы использовать это руководство char* programming language used; какой язык программирования используется в этом руководстве Руководство программиста - это тоже книга, которая имеет заголовок (например, Borland С++ for Windows ), язык (например, английский), цену и год издания. Однако для нашей программы класс - это только абстракция и если не показать взаимосвязь между руководством программиста и книгой, то компилятор будет обрабатывать соответствующие объекты изолированно, без учета взаимосвязи между ними. Правильным решением будет уведомление компилятора о существующей взаимосвязи между классами boolc и programmers guide, т. е. нам надо сказать, что programmers guide - это разновидность книг. В данном случае книга - это более общее понятие. Руководство программиста - более частное понятие, другими словами, это специальная или проблемно-ориентированная книга. Взаимосвязь между общим и частным может быть установлена путем построения базового класса boolc и производного класса programmers guide: class programmers guide : public book { назначение атрибута public поясняется ниже в § 4.6 int level; char* programming language used; Взаимосвязи между базовыми и производными объектами можно выражать и графически с помощью стрелок, которые идут от производных классов к базовым: book <- programmers guide Основная идея построения производных классов заключается в том, что производный класс наследует некоторые свойства базового класса. Поэтому взаимосвязь между производным и базовым классами часто называют наследованием (inheritance). Поддержка механизмов наследования является одной из фундаментальных основ объектно-ориентированного программирования. Базовые классы иногда называют суперклассами, а производные классы - подклассами. Однако следует обратить внимание на то, что в смысле функциональных возможностей производные классы обычно являются более мощными по отношению к их базовым классам, по- book b[number of books]; book *list b[number of books],*p b; programmers guide pg[number of programmers guides]; programmers guide *list p[number of programmers guides], *p p; list b[14] = &b[249]; теперь 14-я карточка указывает на 249-ю книгу cout Iist b[l4]->title; вывод на экран заголовка книги Поскольку руководство программиста - это книга, то следующие два выражения будут тоже правильными: list b[23] = &pg[178]; cout list b[23]->title; скольку ОНИ имеют доступ к своим функциям и к функциям базовых классов, а также манипулируют своими компонентами-данными и компонентами-данными базового класса. Производный класс, вообще говоря, имеет доступ не ко всем компонентам базового класса. Ограничение доступа осуществляется с помощью специальных атрибутов, эти вопросы будут рассмотрены позже. Предположим теперь, что наши книги находятся в библиотеке и их поиск осуществляется с помощью карточек, расположенных в алфавитном порядке (например, по фамилии автора), которые указывают, в какой комнате, на каком стеллаже, на какой полке и в каком месте полки можно найти соответствующую книгу. В каждую книгу вложена карточка, которая содержит информацию для полей в классах book и programmers guide. Таким образом, если классы book и programmers guide - это абстракции, то конкретные книги на полках - это реальность или объекты, существующие во времени и в пространстве. Упомянутые выше карточки можно рассматривать как указатели на книги (здесь имеет место полная аналогия с указателями в языке С). Рассмотрим фрагмент программы на языке С++, который строит множество карточек (указателей) и позволяет работать с ними: #define number of books 1000 # define number of programmers guides 150
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |