Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Конструкторы и деструкторы классов






 

Подготовка к работе. По указанной литературе и конспекту лекций повторить темы «Инкапсуляция», «Классы», «Конструкторы», «Деструкторы».

Разработать программу в соответствии с заданием к лабораторной работе.

 

Задание.

1. Используя класс, созданный при выполнении лабораторной работы №2, заменить в нём функцию выделения памяти для динамического массива конструктором, а функцию освобождение памяти – деструктором. Конструктор должен иметь такой же аргумент, как у функции выделения памяти.

2. Создать стандартный конструктор. Использовать для этого конструктора вторую форму инициализации полей.

3. Создать конструктор копирования. Этот конструктор должен правильно обрабатывать поле класса, являющееся указателем на динамическую память.

В каждом конструкторе класса должен находиться оператор инкремента статического поля, в деструкторе – оператор декремента этого поля. В каждом конструкторе должны находиться операторы вывода сообщений о типе (или номере) конструктора и количестве созданных объектов. Сообщение аналогичного характера должно выводиться при работе деструктора.

4. В функции main() создать составной оператор, внутри которого создать:

- автоматический объект при помощи стандартного конструктора;

- автоматический объект при помощи конструктора с аргументом;

- объект из второго объекта при помощи конструктора копирования;

- указатель на объект класса;

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

Обратить внимание на порядок вызова каждого конструктора.

5. Проверить результат работы конструкторов с помощью функций вывода данных для каждого объекта и каждого элемента массива объектов. Сделать выводы.

6. Изменить режим доступа к любому из конструкторов на закрытый. Проверить создание объекта класса при помощи такого конструктора. Сделать выводы. Вернуть исходный режим доступа.

7. Используя указатель на объект класса, создать динамический объект при помощи первого конструктора. Повторить для этого объекта п. 5. Удалить динамический объект, обратив внимание на работу деструктора.

8. Повторить п. 6 для стандартного конструктора.

9. Повторить п. 6 для конструктора копирования.

10. Создать временный объект при помощи явного вызова любого из конструкторов. Обратить внимание на работу деструктора. Сделать выводы.

11. Обратить внимание на порядок вызова деструкторов при разрушении объектов. Сопоставить вызовы конструкторов и деструкторов с текстом программы. Сделать выводы.

12. Изменить функцию main(), добавив в любое её место, например, после завершения составного оператора, ещё один составной оператор (блок). Внутри этого блока создать локальный динамический объект, используя соответствующий указатель и любой из конструкторов класса. Не удалять динамический объект при завершении блока. Проконтролировать вызов конструктора и деструктора. Сделать выводы.

Ход выполнения программы контролировать по выводимым на экран сообщениям.

Сохранить файлы с текстом программы для следующих работ.

Пример описания класса

Конструкторы и деструктор:

class Mas {

private:

long float *mas;

int Rmas; // Размер массива

public:

Mas(): Rmas(0), mas(0) {} // Стандартный конструктор

Mas(int n): Rmas(n), mas(new long float[n]) {} // Конструктор с аргументом

Mas(const Mas&); // Заголовок конструктора копирования

~Mas() { delete [] mas; } // Деструктор

};

 

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

1. Что такое конструктор класса?

2. Для чего предназначен конструктор?

3. Какими свойствами обладает конструктор?

4. Сколько конструкторов может быть у класса?

5. По какому признаку в тексте программы можно найти конструктор?

6. Когда вызывается конструктор? Может ли он быть вызван явно?

7. Какие формы инициализации полей класса возможны при использовании конструкторов?

8. Что такое «стандартный конструктор»? Когда он используется?

9. Что представляет собой конструктор копирования? Когда он используется?

10. Что такое «стандартный конструктор копирования»? Когда он используется?

11. В каком случае у класса обязательно должен быть конструктор копирования?

12. Сколько и какие конструкторы содержит класс, в котором нет ни одного явно определенного конструктора?

13. Что такое деструктор класса?

14. Для чего предназначен деструктор?

15. Сколько деструкторов может быть у класса?

16. Когда вызывается деструктор? Может ли он быть вызван явно?

17. Вызывается ли деструктор, если из области видимости выходит динамический объект, адресуемый указателем?

18. Какие способы удаления неиспользуемых объектов существуют в языках программирования, поддерживающих ООП?

 

 

Лабораторная работа №4






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.