Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5fan_ru_Obektno-orientirovannoe_programmirovan...doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
351.74 Кб
Скачать

Имя_класса имя объекта;

Например, можно объявить объекты класса V_3d следующим образом:

V_3d d, b, c, *a=&d, &a1;

Здесь

d, b, c – объекты класса;

– указатель на класс;

a1 – ссылка на класс.

Для доступа к данным конкретного объекта используется конструкция:

Имя объекта. Имя элемента

Например, можно явно присвоить значения элементам объекта d класса V_3d:

d.x=1.34; d.y=5.8; d.z=8.5;

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

Действия с объектами класса выполняются с помощью методов класса.

3.5. Методы классов

Функции, объявленные внутри класса, называются его методами. Функции-методы работают с объектами класса, для которых они вызываются.

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

тип_возврата имя_класса ::имя_функции( )

{

тело функции

}

Последовательность символов в виде двойного двоеточия :: называется операцией области видимости (или принадлежности), она показывает, к какому классу принадлежит функция. Например, в листинге 3.3 показано, как записать определение функции mod() вне класса V_3d:

Листинг 3.3.

// определение функции mod()

double V_3d:: mod( ) //операция :: означает, что функция mod()

// принадлежит классу V_3d

{

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

}

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

Следовательно, все методы находятся в сфере действия своего класса, даже если они определены вне этого класса.

Вызов метода класса осуществляется с помощью следующей конструкции:

Имя_объекта. Имя_метода( );

Например, вызов функции mod() для объекта d может быть записан так:

d.mod( );

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

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

Имя класса *this;

this инициализируется так, что он указывает на объект, для которого была вызвана функция, в примере вызова метода d.mod() для объекта d this=&d.

Функция-метод класса может вызываться и через указатель на объект, например, если указатель а инициализирован адресом объекта d, то вызов функции mod() может быть записан так:

a->mod( );

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

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

Данные, описанные внутри класса, как правило, имеют атрибут доступа private. Это означает, что данные класса доступны только методам этого класса. В таком случае следует предусмотреть функцию –метод класса для инициализации данных.

Функция создания и инициализации объектов данного класса называется конструктором.

Конструкторы обладают большинством характеристик обычных методов – их следует объявить и определить в пределах класса, либо объявить в классе, но определить вне его. Однако они обладают некоторыми уникальными свойствами:

  • конструкторы имеют то же имя, что и класс;

  • не имеют объявлений возврата (даже void);

  • не могут быть унаследованы, хотя производный класс может вызывать конструкторы базового класса;

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

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

Конструкторы глобальных переменных вызываются до вызова функции main(). Локальные объекты создаются, как только становится активной сфера действия переменной.

3.7. Параметры конструктора

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]