Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КРАТКИЙ ОБЗОР С.doc
Скачиваний:
1
Добавлен:
26.10.2018
Размер:
2.11 Mб
Скачать

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

      "Эти типы не абстрактные, они столь же реальны,       как int и float"       - Даг Макилрой       В этой главе описываются возможности определения новых типов,       для которых доступ к данным ограничен заданным множеством       функций, осуществляющих его. Объясняется, как можно использовать       члены структуры данных, как ее защищать, инициализировать и,       наконец, уничтожать. В примерах приведены простые классы для       управления таблицей имен, работы со стеком, множеством и       реализации дискриминирующего (т.е. надежного) объединения.       Следующие три главы завершают описание возможностей С++ для       построения новых типов, и в них содержится больше интересных       примеров.

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

Понятие класса, которому посвящена эта и три следующих главы, служит в С++ для того, чтобы дать программисту инструмент построения новых типов. Ими пользоваться не менее удобно, чем встроенными. В идеале использование определенного пользователем типа не должно отличаться от использования встроенных типов. Различия возможны только в способе построения.       Тип есть вполне конкретное представление некоторого понятия. Например, в С++ тип float с операциями +, -, * и т.д. является хотя и ограниченным, но конкретным представлением математического понятия вещественного числа. Новый тип создается для того, чтобы стать специальным и конкретным представлением понятия, которое не находит прямого и естественного отражения среди встроенных типов. Например, в программе из области телефонной связи можно ввести тип trunk_module (линия-связи), в видеоигре - тип explosion (взрыв), а в программе, обрабатывающей текст, - тип list_of_paragraphs (список-параграфов). Обычно проще понимать и изменять программу, в которой типы хорошо представляют используемые в задаче понятия. Удачно подобранное множество пользовательских типов делает программу более ясной. Оно позволяет транслятору обнаруживать недопустимое использование объектов, которое в противном случае останется невыявленным до отладки программы.       Главное в определении нового типа - это отделить несущественные детали реализации (например, расположение данных в объекте нового типа) от тех его характеристик, которые существенны для правильного его использования (например, полный список функций, имеющих доступ к данным). Такое разделение обеспечивается тем, что вся работа со структурой данных и внутрение, служебные операции над нею доступны только через специальный интерфейс (через "одно горло").       Глава состоит из четырех частей:       $$5.2 Классы и члены. Здесь вводится основное понятие       пользовательского типа, называемого классом. Доступ к объектам       класса может ограничиваться множеством функций, описания       которых входят в описание класса. Эти функции называются       функциями-членами и друзьями. Для создания объектов класса       используются специальные функции-члены, называемые       конструкторами. Можно описать специальную функцию-член       для удаления объектов класса при его уничтожении. Такая       функция называется деструктором.       $$5.3 Интерфейсы и реализации. Здесь приводятся два примера       разработки, реализации и использования классов.       $$5.4 Дополнительные свойства классов. Здесь приводится много       дополнительных подробностей о классах. Показано, как       функции, не являющейся членом класса, предоставить доступ       к его частной части. Такую функцию называют другом класса.       Вводятся понятия статических членов класса и указателей       на члены класса. Здесь же показано, как определить       дискриминирующее объединение.       $$5.5 Конструкторы и деструкторы. Объект может создаваться как       автоматический, статический или как объект в свободной       памяти. Кроме того, объект может быть членом некоторого       агрегата (массива или другого класса), который тоже       можно размещать одним из этих трех способов. Подробно       объясняется использование конструкторов и деструкторов,       описывается применение определяемых пользователем функций       размещения в свободной памяти и функций освобождения памяти.