Управление доступом к членам класса — КиберПедия 

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Управление доступом к членам класса

2017-06-05 272
Управление доступом к членам класса 0.00 из 5.00 0 оценок
Заказать работу

Принцип инкапсуляции обеспечивается вводом в класс областей доступа:

· private (закрытый, доступный только собственным методам),

· public (открытый, доступный любым функциям),

· protected (защищенный, доступный только собственным методам и методам производных классов).

Члены класса, находящиеся в закрытой области (private), недоступны для использования со стороны внешнего кода. Напротив, члены класса, находящиеся в открытой секции (public), доступны для использования со стороны внешнего кода. При описании класса каждый член класса помещается в одну из перечисленных выше областей доступа следующим образом:

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

private:

определение_закрытых_членов_класса

public:

определение_открытых_членов_класса

protected:

определение_защищенных_членов_класса };

Порядок следования областей доступа и их количество в классе – произвольны.

Служебное слово, определяющее первую область доступа, может отсутствовать. По умолчанию эта область считается private.

В закрытую (private) область обычно помещаются информационные члены, а в открытую (public) область – методы класса, реализующие интерфейс объектов класса с внешней средой. Если какой-либо метод имеет вспомогательное значение для других методов класса, являясь подпрограммой для них, то его также следует поместить в закрытую область. Это обеспечивает логическую целостность информации [5, 8-9].

После описания класса его имя можно использовать для описания объектов этого типа.

Доступ к информационным членам и методам объекта, описанным в открытой секции, осуществляется через объект или ссылку на объект с помощью операции выбора члена класса ‘.’. Если работа с объектом выполняется с помощью указателя на объект, то доступ к соответствующим членам класса осуществляется на основе указателя на член класса ‘->’. Объекты класса можно определять совместно с описанием класса.

Класс как область видимости

Класс является областью видимости описанных в нем членов класса. Идентификатор члена класса локален по отношению к данному классу. Одноименные идентификаторы членов класса закрывают видимость соответствующих внешних идентификаторов.

Операция ‘ :: ’позволяет получить доступ к одноименным объектам, внешним по отношению к текущей области видимости, в частности, к глобальным функциям и переменным, следующим образом [5, 8-9]:

имя_класса:: имя_члена_класса или

:: имя – для имен глобальных функций и переменных.

Объявление и определение методов класса. Спецификатор inline

Каждый метод класса, должен быть определен в программе. Определить метод класса можно либо непосредственно в классе (если тело метода не слишком сложно и громоздко), либо вынести определение вне класса, а в классе только объявить соответствующий метод, указав его прототип.

При определении метода класса вне класса для указания области видимости соответствующего имени метода используется операции ‘ :: ’.

Это позволяет повысить наглядность текста, особенно, в случае значительного объема кода в методах. При определении метода вне класса с использованием операции ‘ :: ’прототипы объявления и определения функции должны совпадать.

Метод класса и любую функцию, не связанную ни с каким классом, можно определить со спецификатором inline:

inline int func1();

Такие функции называются встроенными.

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

Указатель this

В классах С++ неявно введен специальный указатель this – указатель на текущий объект. Каждый метод класса при обращении к нему получает данный указатель в качестве неявного параметра [5, 8-9]. Через него методы класса могут получить доступ к другим членам класса.

Указатель this можно рассматривать как локальную константу, имеющую тип X*, если X – имя описываемого класса. Нет необходимости использовать его явно. Он используется явно, например, в том случае, когда выходным значением для метода является текущий объект.

Данный указатель, как и другие указатели, может быть разыменован.

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

Конструкторы и деструкторы

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

В большинстве случаев конструкторы и деструкторы вызываются автоматически (неявно) соответственно при определении объекта (в момент отведения памяти под него) и при уничтожении объекта [5, 8-9]. Конструктор (как и деструктор) может вызываться и явно, например, при создании объекта в динамической области памяти с помощью операции new, а деструктор – с помощью операции delete.

Так как конструкторы и деструкторы неявно входят в интерфейс объекта, их обычно располагают в открытой области декларации класса. Приватные конструкторы применяют для создания объектов класса в его статических методах, которые в этом случае можно назвать именованными конструкторами (см. лабораторную работу № 1).

Отличия и особенности описания конструктораот обычной функции, метода класса:

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

2) при описании конструктора не указывается тип возвращаемого значения.

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

В описании конструктора тип возвращаемого значения не указывается не потому, что возвращаемого значения нет. Оно как раз есть. Ведь результатом работы конструктора в соответствии с его названием является созданный объект того типа, который описывается данным классом. Б. Страуструп отмечал, что конструктор – это то, что область памяти превращает в объект.

Конструкторы можно классифицировать разными способами:

1) по наличию параметров:

· без параметров,

· с параметрами;

2) по количеству и типу параметров:

· конструктор умолчания,

· конструктор преобразования,

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

· конструктор с двумя и более параметрами.

Набор и типы параметров зависят от того, на основе каких данных создается объект.

Деструкторы применяются для корректного уничтожения объектов. Часто процесс уничтожения объектов включает в себя действия по освобождению выделенной для них по операциям new памяти.

Обозначение деструктора: ~ имя_класса()

У деструкторов нет параметров и возвращаемого значения. В отличие от конструкторов деструктор в классе может быть только один.

Конструктор умолчания

Конструктор без параметров называется конструктором умолчания (конструктор по умолчанию).

Если для создания объекта не требуется каких-либо параметров, то используется конструктор умолчания. При определении таких объектов после имени класса указывается только идентификатор переменной:

class Х{ };

Х x1;

3.2. Конструктор преобразования и конструкторы с двумя и более параметрами

Если для создания объекта необходимы параметры, то они указываются в круглых скобках после идентификатора переменной:

box b2(1,2,3); box b3(5);

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

Если уже описан класс T и описывается новый класс X, то его конструкторы преобразования могут иметь любой из следующих прототипов:

X(T);

X(T&);

X(const T&);

Последний прототип служит для защиты от изменения передаваемого фактического параметра в теле конструктора, так как при получении ссылки на фактический параметр используется собственно передаваемый объект, а не его локальная копия.


Поделиться с друзьями:

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

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.006 с.