Программирование
на языке Си++
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