Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Топ:
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Интересное:
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Дисциплины:
2017-06-05 | 280 |
5.00
из
|
Заказать работу |
|
|
Принцип инкапсуляции обеспечивается вводом в класс областей доступа:
· 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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!