3. Свойства и методы классов. Их защита.
Объект – логическая единица, которая содержит данные и правила (методы) обработки этих данных. В языке С++ в качестве таких правил обработки выступают функции.
Результатом соединение в единое целое (капсулу) данных и функций, которые обрабатывают эти данные, становятся абстрактные типы данных, или классы. Класс состоит из элементов-данных (свойств), специфицирующих состояние объектов класса, и элементов-функций (методов), специфицирующих поведение объектов класса.
Общий вид описания класса:
ключ_класса имя_класса <: список_родителей>
{список_элементов}
Параметр список_родителей – не обязателен, применяется только в случае построения иерархии классов (наследование). Ключ класса означает одно из ключевых слов class, struct, union.
Внутри объекта данные и функции могут быть:
● общими (public) – элементы класса доступны всем функциям.
● частными (private) – элементы класса доступны только функциям-элементам и функциям-друзьям данного класса.
● защищенными (protected) – аналог private, но также могут быть доступны из порождаемых классов (если разрешено при наследовании).
Конструктор – функция, которая определяет набор действий, выполняемых при создании объекта класса. Имя конструктора совпадает с именем класса, элементом которого он является. Как правило, конструктор содержит вызов оператора new, либо дей1ствия, связанные с начальной инициализацией объекта.
Деструктор – содержит набор операторов, которые выполняются перед уничтожением объекта. В набор таких операторов может входить вызов оператора delete. Имя деструктора совпадает с именем класса, которому предшествует символ ~.
В терминах Паскаля объект очень напоминает запись, которая служит оболочкой для соединения нескольких связанных между собой элементов под одним именем. Процесс задания методов напоминает модули в ТР. Вне объекта метод задается заголовком процедуры или функции, действующей как метод. Когда методы полностью определены вне объекта, имени метода должно предшествовать название типа объекта, которому метод принадлежит, сопровождаемое точкой. ТР разрешает указывать личные (private) поля и методы внутри объекта. Полиморфизм реализуется с помощью виртуальных методов. Метод становится виртуальным, если за его объявлением в типе объекта следует зарезервированное слово virtual.Если метод в родительском типе объявлен как виртуальный, то все методы с таким же именем в любом порожденном типе должны быть так же объявлены виртуальными. Есть конструктор и деструктор.
4. Конструкторы и деструкторы объектов.
Конструкторы и деструкторы – специальные функции-элементы класса, которые вызываются автоматически и определяют список действий, выполняемых при создании и уничтожении объектов класса.
Конструктор – функция, которая определяет набор действий, выполняемых при создании объекта класса. Имя конструктора совпадает с именем класса, элементом которого он является. Как правило, конструктор содержит вызов оператора new, либо дей1ствия, связанные с начальной инициализацией объекта.
Деструктор – содержит набор операторов, которые выполняются перед уничтожением объекта. В набор таких операторов может входить вызов оператора delete. Имя деструктора совпадает с именем класса, которому предшествует символ ~.
Конструкторы и деструкторы не могут быть описаны, как функции, возвращающие значения, даже void. Получит адрес этих функций не возможно. Конструкторы вызываются в порядке создания объектов, деструкторы – в обратном порядке. Конструкторы класса должны иметь спецификатор доступа public.
Каждый класс может иметь несколько конструкторов, которые отличаются друг от друга списком аргументов. У любого класса может быть только один деструктор. Деструктор не имеет аргументов.
Конструктор по умолчанию - не имеет входных параметров, используется когда начальные значения извне не заданы. Конструктор копии – предназначен для инициализации объекта данными другого объекта того же класса(единственный его аргумент – это ссылка на постоянный объект). Если эти два вида конструктора не были определенны программистом, то их автоматически сгенерирует компилятор, при этом конструктор по умолчанию будет пустым, а конструктор копии будет побитно копировать источник в создаваемый объект.
Если деструктор не был явно описан при описании класса, то он будет сгенерирован компилятором.
