Контрольные вопросы для подготовки и самостоятельной работы. Лабораторная работа №21. Использование конструкторов и деструкторов




Контрольные вопросы для подготовки и самостоятельной работы

1 Дайте определение понятиям: объект, класс, данные-члены класса, функции-члены класса.

2 В чём отличие между классом и объектом класса?

3 Можно ли определить функцию внутри класса?

4 Можно ли использовать в различных классах одинаковые имена данных и функций-членов?

5 Какие классы памяти можно использовать при объявлении объектов?

6 Можно ли использовать классы памяти при объявлении членов класса, почему?

7 Что означает термин инкапсуляция?

8 Как производится управление доступом к элементам класса?

9 Что означают спецификаторы доступа public, protected, private

10 Назовите спецификатор доступа по умолчанию к членам класса и структуры.

11 Ограничивается ли количество и порядок следования разделов в классе?

12 Назовите особенности использования статических (static ) членов класса.

13 Для чего используется оператор разрешения области видимости (::)?

14 Могут ли структуры содержать функции в качестве элементов?

15 Могут ли структуры и классы быть вложенными?

16 Какова область действия членов класса?

17 Как получить доступ к статическим членам класса из программы?

18 Можно ли объявить тип в теле класса при объявлении класса?

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

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

(2 часа)

Цель работы: изучить и научиться использовать механизм работы с конструкторами и деструкторами.

Теоретические сведения

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

Существует несколько специальных функций-членов, определяющих, каким образом объекты класса создаются, инициализируются, копируются и разрушаются. Конструкторы и деструкторы являются наиболее важными из них. Они обладают большинством характеристик обычных функций-членов: объявляются в классе и определяются в пределах класса или вне его. Однако, они обладают и некоторыми уникальными свойствами:

1 Они имеют имя, совпадающее с именем класса ( деструкторы с символом тильды ~)

2 Конструкторов может быть несколько, деструктор только один.

3 Они не имеют объявлений типа возвращаемых значений (даже void).

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

5 Конструкторы, как и большинство функций языка С, могут иметь аргументы по умолчанию или использовать списки инициализации элементов.

6 Деструкторы могут иметь атрибут virtual, но конструкторы не могут.

7 Нельзя работать с адресами этих функций.

Пример

void *ptr=base::base; // недопустимо, base()– функция-конструктор класса base

8 Вызвать конструктор тем же образом, что и обычную функцию, нельзя. Вызов деструктора допустим только с полностью уточненным именем.

Примеры

X *p; // указатель на класс Х

X x; // объявление объекта х класса Х

p=&x; // указатель p хранит адрес объекта х

p->X::~X(); // допустимый вызов деструктора

X::X(); // недопустимый вызов конструктора

 

9 При объявлении объектов компилятор вызывает один из конструкторов автоматически.

10 Аналогично при уничтожении объектов компилятор автоматически вызывает деструктор.

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

12 Конструктор создает объект х и инициализирует его данные-члены. При копировании объекта данного класса происходит неявный вызов соответствующего конструктора. Данные-члены объекта класса, у которого все элементы общедоступны (public) и без конструкторов или базовых классов (обычно это структура) могут инициализироваться при помощи списка инициализаторов. Деструктор разрушает объект класса, созданный конструктором, когда этот объект выходит из области видимости.

Конструкторы глобальных объектов вызываются до вызова функции main ().

Локальные объекты создаются, как только становится активной область действия (видимости) объекта. При этом конструктор вызывается каждый раз.

Class Х

{...public:

X(); // конструктор класса Х по умолчанию

// X(X); недопустимо

Х(const X&); // конструктор копирования – передаётся ссылка на Х

~X(); // деструктор класса Х

};

Формальные параметры конструктора при его объявлении могут быть любого типа, за исключением класса, элементом которого является данный конструктор. Конструктор копирования принимает в качестве параметра ссылку на свой собственный класс. Конструктор, не воспринимающий параметров, называется конструктором по умолчанию: Х::Х().

Х х; // объявлен объект х класса Х, вызывается конструктор по умолчанию

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

Объявление класса Определение конструкторов вне класса
class X {int I, jпо- умолчанию private public: X();// конструктор по умолчанию X(int); //перегруженные конструкторы X(int, int);// могут вызываться c одним // X(int) или двумя X(int, int) аргументами X(int а = 5, int в= 6); //может вызываться без аргументов или с одним или двумя // аргументами X(const &); // конструктор копирования }; Х::Х{i=Æ; j=Æ} Х::Х(int a) {i=a; j=Æ;} Х::Х(int a, int b) {i=a; j=b;}

При вызове конструкторов следует избегать неоднозначностей main()



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-09-06 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: