Основные теоретические положения. Определение конструктора и деструктора
Определение конструктора и деструктора
Конструктор (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