Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

CCPP / CPP / Программирование на языке Си++. Модуль №3

.pdf
Скачиваний:
48
Добавлен:
23.03.2016
Размер:
301.04 Кб
Скачать

Программирование

на языке Си++

1

Модуль 3.

СПЕЦИАЛЬНЫЕ МЕТОДЫ КЛАССА

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

2

Модуль 3. СПЕЦИАЛЬНЫЕ МЕТОДЫ КЛАССА

Понятие конструктора класса (начало)

Конструктор — компонентная функция класса, предназначенная для инициализации объектов данного класса. Для каждого экземпляра (объекта) класса конструктор вызывается один раз

Конструктор может вызываться как явно, так и неявно. Неявный вызов конструктора происходит в момент

определения (нединамического) объекта или выделения памяти под объект с использованием операции new

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

конструктора не указывается тип возвращаемого значения, в том числе void

Каждый класс имеет как минимум два конструктора, формируемых для класса по умолчанию (см. далее)

3

Модуль 3. СПЕЦИАЛЬНЫЕ МЕТОДЫ КЛАССА

Понятие конструктора класса (продолжение)

Определение конструктора (в составе определения класса)

class <имя типа>

{

// ...

<имя типа> ([<спецификация формальных параметров>])

{

[<тело конструктора>]

}

// ...

 

 

}

В теле класса определение конструктора может быть заменено его описанием (прототипом)

<имя типа> ([<спецификация формальных параметров>]);

Как и другие функции, конструктор может быть перегружен

4

Модуль 3. СПЕЦИАЛЬНЫЕ МЕТОДЫ КЛАССА

Понятие конструктора класса (окончание)

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

Альтернативный способ инициализации компонентных данных через механизм параметров

<имя типа> (<спецификация формальных параметров>) :

 

<список инициализирующих выражений>

{

[<тело конструктора>]

}

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

<имя компонента> (<выражение>)

5

Модуль 3. СПЕЦИАЛЬНЫЕ МЕТОДЫ КЛАССА

Вызов конструктора

Неявный (автоматический) вызов при определении объекта (параметры принимают значения по умолчанию)

<имя типа> <идентификатор>;

Неявный (автоматический) вызов при размещении объекта операцией new (параметры принимают

значения по умолчанию)

<имя типа> <идентификатор> = new <имя типа>;

Явный вызов при определении именованного объекта

(только при непустом списке параметров)

<имя типа> <идентификатор> (<список фактических параметров>);

Явный вызов при определении неименованного объекта

<имя типа> (<список фактических параметров>)

6

Модуль 3. СПЕЦИАЛЬНЫЕ МЕТОДЫ КЛАССА

Виды конструкторов

Конструктор по умолчанию (прототип) — формируется для класса автоматически, может быть переопределен

<имя типа> :: <имя типа>();

Конструктор копирования (прототип) — формируется для класса автоматически, может быть переопределен

<имя типа> :: <имя типа>(const <имя типа>&);

Конструкторы преобразования — проектируются вручную, имеют произвольную сигнатуру

7

Модуль 3. СПЕЦИАЛЬНЫЕ МЕТОДЫ КЛАССА

Понятие деструктора класса. Вызов деструктора (начало)

Деструктор — компонентная функция класса, предназначенная для подготовки объекта класса к освобождению памяти. Для каждого экземпляра (объекта) класса деструктор вызывается один раз, причем чаще всего неявно — по окончании времени жизни экземпляра (объекта)

Имя деструктора стоит из имени класса, которому предшествует символ ~. Деструктор не принимает

параметров (в том числе типа void), и для него не указывают тип возвращаемого значения (в том числе void )

8

Модуль 3. СПЕЦИАЛЬНЫЕ МЕТОДЫ КЛАССА

Понятие деструктора класса. Вызов деструктора (окончание)

Определение деструктора (в составе определения класса)

class <имя типа>

{

// ...

 

 

~<имя типа> () {

[<тело деструктора>]

}

// ...

 

 

}

В теле класса определение деструктора может быть заменено его описанием (прототипом)

~<имя типа> ();

Явный вызов для разрушения объекта (возможны и другие варианты вызова деструктора как компонентной функции)

<идентификатор>.[<имя типа>::] ~<имя типа>();

9

Список литературы

[КР92] Керниган Б., Ритчи Д. Язык программирования Си / Пер. с англ. — М.: Финансы и статистика, 1992. — 272 с.

[КР06] Керниган Б., Ритчи Д. Язык программирования C / Пер. с англ. — М.:

Вильямс, 2006. — 304 с.

[ЛЛ01] Липпман С., Лажойе Ж. Язык программирования C++. Вводный курс.

— СПб.: Невский диалект, 2001. — 1104 с.

[Под03] Подбельский В.В. Язык Си++: Учеб. пособие. — 5-е изд. — М.: Финансы и статистика, 2003. – 560 с., ил.

[Под04] Подбельский В.В., Фомин С.С. Программирование на языке Си. – 2-е доп. изд. – М.: Финансы и статистика, 2004. – 600 с.

[Стр08] Страуструп Б. Язык программирования С++. Специальное издание.

— СПб.: Невский диалект, 2008. — 1104 с.

10