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

1 ... 40 41 42 [ 43 ] 44 45 46 ... 159


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



1 ... 40 41 42 [ 43 ] 44 45 46 ... 159

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