- •Санкт-Петербургский
- •Процедурное программирование
- •Объектно-ориентированное программирование
- •Обобщенное программирование
- •На пути к объектно-ориентированному программированию
- •Абстракция сущностей и процедурный язык программирования
- •Абстрактный тип данных
- •Организация класса
- •Определение и объявление класса
- •Члены класса
- •Маркеры доступа
- •Конструкторы
- •Понятие об объекте
- •Организация кода при работе с классами
- •Статические компоненты класса
- •Дружественные функции и дружественные классы
- •Особенности применения дружественных функций и классов
- •Перегрузка оператров
- •Перегрузка оператора присваивания
- •Реализация перегруженного оператора присваивания для класса Array
- •Перегрузка оператора индексирования
- •Понятие о константной функции
- •Константный вариант перегруженного оператора индексирования
- •Вычисление смешанных выражений
- •Наследование
- •Структура объекта порожденного класса
- •Доступ к элементам базового класса
- •Конструкторы порожденного класса
- •Порядок создания объекта порожденного класса
- •Перегруженный оператор присваивания порожденного класса
- •Вызов виртуальной функции из тела невиртуальной функции
- •Виртуализация функций не-членов класса
- •Идиома невиртуального интерфейса (nvi)
- •Реализация механизма виртуальных функций
- •Накладные расходы при работе с виртуальными функциями
- •Чисто виртуальные функции. Абстрактные базовые классы
- •Виртуальные деструкторы
- •Автономные и базовые классы
- •Дублирование подобъектов
- •Конструкторы при виртуальном наследовании
- •Работа с данными при виртуальном наследовании
- •Обработка исключительных ситуаций
- •Завершение или продолжение
- •Распределение обязанностей между разработчиком и клиентом
- •Генерация исключений
- •Объект исключения
- •Раскрутка стека
- •Спецификации исключений
- •Работа с обработчиками
- •Формат обработчика
- •Пример обработки исключений
- •Современная точка зрения на спецификации исключения
- •Шаблоны функций
- •Объявление и определение шаблона функции
- •Примеры объявлений и определений шаблонов функций
- •Инстанцирование шаблона функции
- •Неявное инстанцирование
- •Явное инстанцирование конкретной функции
- •Структура использования шаблона функции с явным инстанцированием
- •Перегрузка шаблона функции
- •Явная специализация шаблона функции
- •Шаблоны классов
- •Использование шаблона класса
- •Наследование и шаблоны
- •Шаблоны классов и отношение включения
- •Рекурсивное использование шаблонов классов
- •Друзья и шаблоны классов
- •Явная и частичная специализация шаблона класса
- •Алгоритмы
- •Алгоритм for_each
- •Функциональные объекты
- •Алгоритм copy
- •Алгоритм sort
- •Термины и определения
- •.Литература
Маркеры доступа
Для обеспечения инкапсуляции в языке С++ используются так называемые маркеры доступа (accesslabel). В качестве маркеров доступа используются следующие зарезервированные слова языка С++:
public(общедоступный),
protected(защищенный),
private(закрытый).
Указанные зарезервированные слова применяются в качестве меток к группе объявлений членов класса. Маркер доступа отделяется от объявления члена класса двоеточием. В теле класса обычно образуются разделы объявлений членов класса, наделенных одинаковыми правами доступа.
Все члены класса, находящиеся в public-разделе, доступны в любом клиентском коде, использующем возможности рассматриваемого класса. Члены класса, находящиеся вprivate-разделе доступны только функциям членам данного класса. Защищенный (protected) доступ имеет отношение к наследованию классов, и будет рассматриваться в соответствующем разделе курса
Если в теле класса нет ни одного маркера доступа, то права доступа определяются принципом умолчания. Для классов, использующих в заголовке зарезервированное слово class, в соответствии с этим принципом все его члены будут закрытыми. Для классов же, использующих в заголовке зарезервированное словоstruct, в соответствии с этим принципом все его члены будут открытыми. Этот же принцип умолчания действует для объявлений тех членов, которые записаны до первого маркера доступа.
Конструкторы
Здесь приводятся начальные сведения о конструкторах. В дальнейшем конструкторам будет посвящен специальный раздел.
Конструктор – специальная член-функция класса, которая обычно вызывается в момент создания объекта и служит для инициализации объекта. Особенность конструктора как члена-функции состоит в следующем:
имя конструктора совпадает с именем класса
конструктор не имеет типа возвращаемого значения.
конструктор нельзя вызвать для существующего объекта, как обычную функцию-член класса.
Один из способов инициализации объекта с помощью конструктора (полей объекта) состоит в присваивании в теле конструктора полям объекта значений, передаваемых через параметры конструктора.
Пример. Конструкторы класса «Комплексные числа»
class Complex { public: Complex() { re_ = 0; im_ = 0; } Complex(double re, double im) { re_ = re; im_ = im; } // Определения других членов-функций private: double re_, im_ };
В теле определения класса Complex, приведенного выше, имеются два раздела объявлений членов класса. Вначале находится общедоступный раздел (public-раздел илиpublic-секция), который начинается после маркера и заканчивается перед маркеромprivate. Этот раздел содержит определения двух конструкторов. Первым записано определение так называемого конструктора умолчания. Конструктор умолчания по определению – это конструктор, не принимающий параметров. Вторым записано определения конструктор, принимающий два параметра.
Закрытый раздел класса (public-раздел) содержит объявления двух членов-переменных.