Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Когда вызываются конструкторы и деструкторы




Использование деструкторов

Деструктор решает задачу, обратную задаче конструктора. Деструктор (destruct - разрушать) - это специальная функция-член класса. Имя деструктора состоит из символа тильда (~) и имени класса.

Пример деструктора: ~my_Time() { // тело деструктора }

Деструктор класса вызывается при уничтожении объекта - например, когда объект выходит из области видимости. Деструктор может выполнять любые задачи, необходимые для удаления объекта. Например, если в конструкторе была динамически выделена область памяти для хранения массива строк, то деструктор должен освободить эту память непосредственно перед удалением экземпляра класса.

Деструктор не принимает никаких параметров и не возвращает никаких значений. Класс может иметь только один деструктор.

Типичная ошибка программирования. Попытки передать аргументы деструктору, вернуть значение из деструктора.

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

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

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

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

Если объект определен локально с использованием спецификатора static, конструктор вызывается сразу же, как только процесс выполнения впервые достигает места, где объект был объявлен, деструктор - в конце программы.

Пример Программы показывает последовательность, в которой вызываются конструкторы и деструкторы объектов типа CreateAndDestroy в разных областях видимости. Объект first является глобальным объектом, его конструктор вызывается, как только программа начинает выполнение, а его деструктор вызывается по завершении программы, после того, как все другие объекты уничтожены.

В функции main объявлено три объекта. Объекты second и fourth являются локальными объектами, а объект third объявлен с классом памяти static. Конструкторы каждого из этих объектов вызываются, когда процесс выполнения достигает места, где объекты были объявлены. Деструкторы объектов fourth и second вызываются в соответствующем порядке, когда заканчивается main. Поскольку объект third - статический, то он существует до завершения программы. Деструктор объекта third вызывается раньше деструктора для first, но после уничтожения всех других объектов.

Функция create объявляет три объекта - локальные объекты fifth и seventh и статический локальный объект sixth. Деструкторы для объектов seventh и fifth вызываются в соответствующем порядке по окончании create. Поскольку sixth - статический объект, он существует до завершения программы. Деструктор для sixth вызывается раньше деструктора для third и first, но после уничтожения всех других объектов.

Программа
/* Демонстрация последовательности, в которой вызываются конструкторы и деструкторы. */ #include<iostream.h> // описание класса CreateAndDestroyclass CreateAndDestroy{public: CreateAndDestroy(int value) // конструктор { data = value; cout << " Object " << data << " constructor"; } ~CreateAndDestroy() // деструктор { cout << " Object " << data << " destructor" << endl; }private: int data;}; CreateAndDestroy first(1); // глобальный объект void create(void); //прототип функции void main (){ cout << " (global object) " << endl; CreateAndDestroy second(2); // локальный объект cout << " (local auto object in main) " << endl; static CreateAndDestroy third(3); // статический объект cout << " (local static object in main) " << endl; create(); // вызов функции создания объектов CreateAndDestroy fourth(4); // локальный объект cout << " (local auto object in main) " << endl;} // Функция создания объектовvoid create(void){ CreateAndDestroy fifth(5); // локальный объект cout << " (local auto object in create) " << endl; static CreateAndDestroy sixth(6); // статический объект cout << " (local static object in create) " << endl; CreateAndDestroy seventh(7); // локальный объект cout << " (local auto object in create) " << endl;}

 

Результаты выполнения программы
Object 1 constructor (global object)Object 2 constructor (local auto object in main)Object 3 constructor (local static object in main)Object 5 constructor (local auto object in create)Object 6 constructor (local static object in create)Object 7 constructor (local auto object in create)Object 7 destructor Object 5 destructor Object 4 constructor (local auto object in main)Object 4 destructor Object 2 destructor Object 6 destructor Object 3 destructor Object 1 destructor

Домашнее задание

  1. Цифровой счетчик, это переменная с ограниченным диапазоном. Значение которой сбрасывается, когда ее целочисленное значение достигает определенного максимума (например, k принимает значения в диапазоне от 0..100). В качестве примера такого счетчика можно привести цифровые часы, счетчик километража. Опишите класс такого счетчика. Обеспечьте возможность установления максимального и минимального значений, увелечения счетчика на 1, возвращения текущего значения.
  2. Напмсать класс, описывающий группу студентов. Студент также реализуется с помощью соответствующего класса.



Поделиться с друзьями:


Дата добавления: 2014-01-14; Просмотров: 610; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.