Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прикладное программирование.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
439.97 Кб
Скачать

4.2.2. Директивы препроцессору # if ! defined, # endif (проверка на повторное подключение)

Обратите внимание, что определение класса заключено в следующую конструкцию, представляющую собой директиву препроцессору:

// проверка на повторное подключение файла

#if !defined LENS_H

#define LENS_H

// ...

#endif //defined LENS_H

Дело в том, что когда программа содержит большое число заголовочных файлов, которые тоже подключают какие-то другие заголовочные файлы, может возникнуть ситуация, когда один и тот же файл подключается несколько раз, что приводит к ошибке.

Данная конструкция предотвращает включение кода, находящегося между # if ! defined и # endif. Если заголовок ранее не включался в исходный файл, директива #define определяет имя LENS _ H и далее подключит остальное содержимое заголовочного файла. Если этот файл уже подключался ранее, LENS _ H уже определено и содержимое заголовочного файла повторно не подключается.

Обычно имя константы в этих препроцессорных директивах является именем заголовочного файла в верхнем регистре с заменой точки на символ подчеркивания.

4.2.3. Тип доступа к членам класса

class Lens

{

private: // доступны только внутри класса

// ...

protected: // доступны внутри и для наследников

// ...

public: // доступны везде

// ...

}

При описании класса для описания доступа к переменным и функциям-членам класса используются ключевые слова private, protected, public. Переменные и функции, описанные как private будут доступны только функциям-членам класса, к ним невозможно обратиться извне класса через оператор "." или "->".

Переменные и функции, описанные как public, будут доступны и внутри класса, и снаружи. Класс видимости protected играет важную роль при наследовании: если к некоторым private-членам класса необходимо получать доступ из классов наследников, то они должны быть помечены как protected. Подробно о наследовании см.главу 5.

Таким образом, public-функции и переменные называются интерфейсом и позволяют управлять состоянием и поведением класса, а то, что относится к внутренней реализации, должно быть скрыто посредством private. Посредством сокрытия части информации об объекте в нём самом, выполняется один из принципов ООП – инкапсуляция. Обычно скрывается его внутреннее устройство (набор атрибутов и реализация методов). Но внешнее поведение (public-члены) сразу прорабатываются настолько подробно, чтобы интерфейс объекта не изменялся.

4.2.4. Принципы объектно-ориентированного проектирования

Хотя подробно объектно-ориентированное проектирование в данном курсе не рассматривается, общее представление о принципах ООП может помочь в понимании особенностей реализации классов на языке С++.

Принципы ООП:

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

  • Инкапсуляция - никакая часть сложной системы не должна зависеть от внутреннего устройства какой-либо другой части. Инкапсуляция позволит не только скрыть детали реализации, но и позволит коллегам независимо друг от друга улучшать реализацию своих объектов (эффективность, скорость, требуемый объём памяти и т.п.).

  • Сохраняемость - возможность объекта сохранить информацию о своём состоянии, а затем при необходимости восстановить его.

  • Наследование - отношение между классами, когда один объект заимствует структурную и функциональную часть другого. Подробно о наследовании см.главу 5.

  • Полиморфизм (типизация) - возможность принимать множество форм, изменять поведение в зависимости от ситуации. Подробно о полиморфизме см.главу 6.