Основные теоретические положения. Определение конструктора и деструктора

 

Определение конструктора и деструктора

Конструктор (constructor) – это компонентная функция, предназначенная для создания объектов типа своего класса. Под созданием понимается инициализация компонентных данных и при необходимости распределения под них свободной памяти с помощью new. Имя конструктора совпадает с именем класса.

Деструктор (destructor) – это компонентная функция, предназначенная для уничтожения объектов типа своего класса. Под уничтожением понимается освобождение свободной памяти с помощью delete. Имя деструктора – это предваряемое символом «~» Имя класса.

 

 

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

 

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

 

Н а п р и м е р :

type m[10];

 

является объявлением массива из десяти объектов типа type, при этом используется конструктор по умолчанию:

 

type :: type( ) {…..} // список аргументов пустой

или

type :: type(int i = 0) {……} // все аргументы имеют значения по умолчанию

 

 

Копирующий конструктор

 

Копирующий конструктор предназначен для копирования одного значения типа класса в другое и имеет вид

type :: type (const type & x)

Копирующий конструктор вызывается в следующих случаях:

- если объект типа type инициализируется значением типа type;

- когда параметр типа type передается функции по значению;

- когда функция возвращает значение типа type.

При отсутствии копирующего конструктора эти действия по умолчанию выполняются поэлементно.

 

 

4. Конструктор – функция преобразования типа

 

Конструктор с одним параметром автоматически является функцией преобразования типа параметра к типу класса.

 

Н а п р и м е р :

 

type :: type (int); // преобразует int к type.

 

Использование explicit в начале объявления запрещает такое преобразование.

 

 

Инициализаторы конструктора

 

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

 

Н а п р и м е р :

 

type :: type (int t): i(7), j(t) //инициализаторы

{// остальное тело конструктора}

 

Инициализаторы необходимы всегда для нестатических элементов констант или ссылок.

Конструкторы и деструкторы не наследуются. В отличие от деструкторов конструкторы не могут быть виртуальными.

П р и м е р :

 

class vector{

public:

explicit vector (int n = 10); // константа по умолчанию

vector (const vector & v); // копирующая константа

vector (const int a[ ], int n); // конструктор с параметрами

~vector ( ) {delete [ ] p;} // деструктор

-- -- -- --

-- -- -- --

private:

int *p; // базовый адрес массива

int size; // число элементов массива

};

 

Задания

 

Модифицируйте абстрактный тип данных, реализованный по заданию раздела IV, согласно варианту задания (см. раздел III), заменив соответствующие компонентные функции на систему конструкторов и деструктор.

Проверьте работоспособность АТД на тестовом наборе данных.

 

 

Контрольные вопросы

 

1. Каковы особенности синтаксиса и семантики конструкторов и деструкторов?

2. В чем заключаются особенности применения конструкторов по умолчанию?

3. В каких случаях вызывается копирующий конструктор?

4. При каких условиях конструктор может использоваться для преобразования типа?

5. В каких ситуациях необходимы инициализаторы конструктора, синтаксис и семантика их использования?

 

 

Рекомендуемая литература

 

1. Бадд Т. Объектно-ориентированное программирование в действии: Пер. с англ. – СПб.: Питер, 1997. – 464 с.

2. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++ : Пер. с англ. – 2-е изд. – М.: Изд-во "БИНОМ"; СПб.: Невский диалект, 1999. – 560 с.

3. Подбельский В.В. Язык С++: Учеб. пособие для вузов. – 5-е изд. – М.: Финансы и статистика, 2001.

4. Пол А. Объектно-ориентированное программирование на С++ : Пер. с англ. – 2-е изд. – СПб.: Невский диалект; М.: Изд-во "БИНОМ", 1999. – 462 с.

5. Страуструп Б. Язык программирования С++ : Пер. с англ. - 3-е изд. – СПб.: Невский диалект: М.: Изд-во "БИНОМ", 1999. - 991 с.

6. Фридман А.Л. Основы объектно-ориентированного программирования на языке С++. – М.: Горячая линия –Телеком, Радио и связь, 1999. – 208 с.

 


 

Содержание

Введение...................................................................................................... 3

Раздел I. Программирование функций ........................................... 4

Раздел II. Обработка массивов ......................................................... 9

Раздел III. Обработка структурированных типов данных............... 14

Раздел IV. Разработка абстрактных типов данных .......................... 18

Раздел V. Создание и уничтожение объектов класса ..................... 22

Рекомендуемая литература ................................................................... 25


 


Редактор Н.А. Бачурина

Компьютерная верстка: М.Н. Авдюхова

ЛР № 021316 от 25 декабря 1998 г.

 
 


Сдано в набор 25.12.02 г. Подписано к печати 27.02.03 г.

Тир. 25 экз. Уч.-изд. л. 0,8. Формат 60´84 1/16. Усл. печ. л. 1,63.

Гарнитура Таймс. Зак.

 

Череповецкий государственный университет

162600, г. Череповец, пр. Луначарского, 5