Список инициализаторов в конструкторе

Основные понятия объектно-ориентированного программирования. Реализация концепций ООП в различных языках программирования.

Объектно-ориентированное программирование

Объектно-ориентированное программирование (ООП) — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы могут образовывать иерархию наследования.

Преимущества использования ООП

? уменьшение сложности программного обеспечения;

? повышение надежности программного обеспечения;

? обеспечение возможности модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов;

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

Классы и объекты

l Класс – определенный пользователем проблемно-ориентированный тип данных, описывающий внутреннюю структуру объектов, которые являются его экземплярами.

l Объект (экземпляр класса) находится в таком же отношении к своему классу, в каком переменная находится по отношению к своему типу.

Состав класса

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

l Данные, входящие в класс, называются данными-членами или полями.

l Функции, принадлежащие классу, называют функциями-членами или методами.

Объединение в одной конструкции полей и методов называется инкапсуляцией

Описание класса в языке C++ (в простейшем случае)

class имя_класса {

спецификаторы_доступа

описания_полей

описания_методов

};

Описания полейпо формату совпадают с описаниями переменных .

Описания методовпредставляют собой заголовки функций.

Спецификаторы доступаслужат для разграничения полномочий между разработчиками и пользователями класса

Внутренние и внешние методы

Методы класса делятся на внутренние и внешние.

l Внутренние методы реализованы в рамках описания класса; их текст доступен для чтения пользователям класса.

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

Пример описания и реализации класса (точка на плоскости)

class Point2D {

double x, y; // поля класса

double Module () { // внутренний метод

return sqrt(x*x+y*y);

}

};

Спецификаторы доступа

? private: — члены класса, доступные только разработчикам класса (т.е. только при реализации методов этого класса)

? public: — члены класса, доступные как разработчикам, так и пользователям класса

? protected: — члены класса, доступные разработчикам класса и разработчикам классов-потомков

Спецификатор по умолчанию – private:

Рекомендации по использованию разграничений доступа

? Поля класса следует максимально защитить от пользователей класса, объявив их со спецификатором private:

? Для работы с объектами пользователь может пользоваться методами этих объектов, объявленными со спецификатором public:

? Для получения информации о характеристиках объекта (в том числе о защищённых полях) должны быть написаны т.н. get-методы

? Для изменения характеристик объекта (в том числе защищённых полей) должны быть написаны т.н. set-методы

Константные методы

Методы, не изменяющие значения полей объекта, для которого эти методы применяются, называются константными.

Для объявления константного метода необходимо записать слово const в конце заголовка такого метода (как в описании класса, так и в реализации)

Преимущества константных методов:

? дополнительный контроль компилятора за правильностью написания;

? в функциях, в которые объект передаётся по константной ссылке, для этого объекта можно вызывать только константные методы.

Конструкторы

Конструктор – специальный метод, который неявно вызывается при создании нового объекта.

Назначение конструктора – выполнение дополнительных действий по инициализации объекта (например, задание начальных значений полей создаваемого объекта).

Описание конструктора

? Конструктор может быть, как внутренним, так и внешним методом;

? Имя конструктора совпадает с именем класса;

? Конструктор не возвращает никакого значения (даже void);

? За счет механизма перегрузки может быть создано несколько конструкторов, различающихся набором параметров;

? Если ни одного конструктора не написано, реализуется т.н. конструктор по умолчанию без параметров. Этот конструктор не выполняет никаких дополнительных действий.

Список инициализаторов в конструкторе

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

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

Для обычных полей использование списка инициализации допустимо, но не обязательно.

Список инициализации обязателен:

? если в качестве поля задаётся объект другого класса, для которого должен быть запущен конструктор;

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

Деструкторы

Деструктор – специальный метод, который неявно вызывается при корректном уничтожении объекта.

Назначение деструктора – выполнение дополнительных действий по освобождении ресурсов, захваченных при создании объекта или в процессе работы с ним.

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

Описание деструктора

? Деструктор может быть как внутренним, так и внешним методом;

? Имя деструктора совпадает с именем класса, перед которым стоит знак ~;

? Деструктор не имеет параметров.

Конструктор копирования

Конструктор копирования – специальный конструктор, который получает в качестве параметра константную ссылку на объект этого же типа.

Список инициализации в конструкторе


Похожие статьи.

Понравилась статья? Поделиться с друзьями: