Всё для программиста

Новые типы С++
Индекс материала
Новые типы С++
Классы и Члены
Классы
Инициализация
Очистка
Интерфейсы и Реализации
Законченный Класс
Друзья и Объединения
Вложенные Классы
Структуры и Объединения
Конструкторы и Деструкторы
Предостережение
Свободная Память
Вектора Объектов Класса
Небольшие Объекты
Предостережение
Упражнения
Перегрузка Операций
Функции Операции
Предопределенный Смысл Операций
Конструкторы
Константы
Присваивание и Инициализация
Индексирование
Вызов Функции
Класс String
Синтаксис вызова функции
Предостережение
Упражнения
Производные Классы
Производные Классы
Функции
Видимость
Указатели
Иерархия Типов
Конструкторы и Деструкторы
Поля Типа
Виртуальные Функции
Альтернативные Интерфейсы
Реализация
Как Этим Пользоваться
Обработка Ошибок
Обобщенные Классы
Ограниченные Интерфейсы
Добавление к Классу
Неоднородные Списки
Администратор Экрана
Библиотека Фигур
Прикладная Программа
Свободная Память
Упражнения
Все страницы

Классы

Эти типы не «абстрактны», они столь же реальны, как int и float. – Дуг МакИлрой

Здесь описываются возможности определения новых типов в С++, для которых доступ к данным ограничен заданным множеством функций доступа. Объясняются способы защиты струтуры данных, ее инициализации, доступа к ней и, наконец, ее уничтожения. Примеры содержат простые классы для работы с таблицей имен, манипуляции стеком, работу с множеством и релизацию дискриминирующего (то есть, «надежного») объединения. Две следующие главы дополнят описание возможностей определния новых типов в С++ и познакомят читателя еще с некоторыми интересными примерами.


5.1 Знакомство и Краткий Обзор

Предназначение понятия класса, которому посвящены эта и две последующие главы, состоит в том, чтобы предоставить программисту инструмент для создания новых типов, столь же удобных в обращении сколь и встроенные типы. В идеале тип оределяемый пользователем, способом использования должен отлчаться от встроенных типов, только способом создания.

Тип есть конкретное представление некоторой концепции (понятия). Например, имеющийся в С++ тип float с его операцями +, -, * и т.д. обеспечивает ограниченную, но конкретную версию математического понятия действительного числа. Новый тип создается для того, чтобы дать специальное и конкретное определение понятия, которому ничто прямо и очевидно среди встроенных типов не отвечает. Например, в программе, которая работает с телефоном, можно было бы создать тип trunk_module (элемент линии), а в программе обработки текстов – тип list_of_paragraphs (список параграфов). Как правило, програму, в которой создаются типы, хорошо отвечающие понятиям прложения, понять легче, чем программу, в которой это не делется. Хорошо выбранные типы, определяемые пользователем, делают программу более четкой и короткой. Это также позволяет компилятору обнаруживать недопустимые использования объектов, которые в противном случае останутся необнаруженными до тетирования программы.

В определении нового типа основная идея – отделить несщественные подробности реализации (например, формат данных, которые используются для хранения объекта типа) от тех кчеств, которые существенны для его правильного использования (например, полный список функций, которые имеют доступ к даным). Такое разделение можно описать так, что работа со структурой данных и внутренними административными подпрограмами осуществляется через специальный интерфейс (канализирется).

Эта глава состоит из четырех практически отдельных чатей:

#5.2 Классы и Члены. Этот раздел знакомит с основным понятием типа, определяемого пользователем, который называеся класс (class). Доступ к объектам класса может ограничваться набором функций, которые описаны как часть этого класа. Такие функции называются функциями членами. Объекты класса создаются и инициализируются функциями членами, спецально для этой цели описанными. Эти функции называются контрукторами. Функция член может быть специальным образом опсана для «очистки» каждого классового объекта при его уничтожении. Такая функция называется деструктором.

#5.3 Интерфейсы и Реализации. В этом разделе приводится два примера того, как класс проектируется, реализуется и ипользуется.

#5.4 Друзья и Объединения. В этом разделе приводится много дополнительных подробностей, касающихся классов. В нем показано, как предоставить доступ к закрытой части класса функции, которая не является членом этого класса. Такая фунция называется друг (friend). В этом разделе показано также, как определить дискриминирующее объединение.

#5.5 Конструкторы и Деструкторы. Объект может создаватся как автоматический, статический или как объект в свободной памяти. Объект может также быть членом некоторой совокупности (типа вектора или класса), которая в свою очередь может рамещаться одним из этих трех способов. Довольно подробно обясняется использование конструкторов и деструкторов.