Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Cpp_Страуструп.doc
Скачиваний:
18
Добавлен:
03.05.2015
Размер:
3.2 Mб
Скачать

* Глава 5. Классы

"Эти типы не абстрактные, они столь же реальны,

как int и float"

- Даг Макилрой

В этой главе описываются возможности определения новых типов,

для которых доступ к данным ограничен заданным множеством

функций, осуществляющих его. Объясняется, как можно использовать

члены структуры данных, как ее защищать, инициализировать и,

наконец, уничтожать. В примерах приведены простые классы для

управления таблицей имен, работы со стеком, множеством и

реализации дискриминирующего (т.е. надежного) объединения.

Следующие три главы завершают описание возможностей С++ для

построения новых типов, и в них содержится больше интересных

примеров.

5.1 Введение и краткий обзор

Понятие класса, которому посвящена эта и три следующих главы, служит

в С++ для того, чтобы дать программисту инструмент построения новых

типов. Ими пользоваться не менее удобно, чем встроенными.

В идеале использование определенного пользователем типа не должно

отличаться от использования встроенных типов. Различия возможны только

в способе построения.

Тип есть вполне конкретное представление некоторого понятия.

Например, в С++ тип float с операциями +, -, * и т.д. является

хотя и ограниченным, но конкретным представлением математического

понятия вещественного числа. Новый тип создается для того, чтобы

стать специальным и конкретным представлением понятия, которое не находит

прямого и естественного отражения среди встроенных типов. Например,

в программе из области телефонной связи можно ввести тип

trunk_module (линия-связи), в видеоигре - тип explosion (взрыв),

а в программе, обрабатывающей текст, - тип list_of_paragraphs

(список-параграфов). Обычно проще понимать и изменять программу,

в которой типы хорошо представляют используемые в задаче понятия.

Удачно подобранное множество пользовательских типов делает программу

более ясной. Оно позволяет транслятору обнаруживать недопустимое

использование объектов, которое в противном случае останется

невыявленным до отладки программы.

Главное в определении нового типа - это отделить несущественные

детали реализации (например, расположение данных в объекте нового

типа) от тех его характеристик, которые существенны для правильного

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

к данным). Такое разделение обеспечивается тем, что вся работа со

структурой данных и внутрение, служебные операции над нею доступны

только через специальный интерфейс (через "одно горло").

Глава состоит из четырех частей:

$$5.2 Классы и члены. Здесь вводится основное понятие

пользовательского типа, называемого классом. Доступ к объектам

класса может ограничиваться множеством функций, описания

которых входят в описание класса. Эти функции называются

функциями-членами и друзьями. Для создания объектов класса

используются специальные функции-члены, называемые

конструкторами. Можно описать специальную функцию-член

для удаления объектов класса при его уничтожении. Такая

функция называется деструктором.

$$5.3 Интерфейсы и реализации. Здесь приводятся два примера

разработки, реализации и использования классов.

$$5.4 Дополнительные свойства классов. Здесь приводится много

дополнительных подробностей о классах. Показано, как

функции, не являющейся членом класса, предоставить доступ

к его частной части. Такую функцию называют другом класса.

Вводятся понятия статических членов класса и указателей

на члены класса. Здесь же показано, как определить

дискриминирующее объединение.

$$5.5 Конструкторы и деструкторы. Объект может создаваться как

автоматический, статический или как объект в свободной

памяти. Кроме того, объект может быть членом некоторого

агрегата (массива или другого класса), который тоже

можно размещать одним из этих трех способов. Подробно

объясняется использование конструкторов и деструкторов,

описывается применение определяемых пользователем функций

размещения в свободной памяти и функций освобождения памяти.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]