Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
умп_oop_1.doc
Скачиваний:
14
Добавлен:
22.03.2015
Размер:
162.3 Кб
Скачать

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

  1. Дайте определение понятия «класс». Сформулируйте правила доступа к его элементам.

  2. С какой целью в классе объединены компонентные данные и компонентные функции?

  3. Каким образом осуществляется доступ к открытым и закрытым элементам?

  4. Опишите назначение дружественных функций, назовите их разновидности.

  5. Что понимается под указателем this?

  6. Каковы особенности использования статических компонентных данных?

  7. В чем заключается синтаксис и семантика компонентных функций static и const?

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

  9. Каковы особенности создания вложенных классов?

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

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

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

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

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

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

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

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

Н а п р и м е р :

type m[10];

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

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

или

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

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

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

type :: type (const type & x)

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

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

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

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

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

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

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

Н а п р и м е р :

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

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

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

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

Н а п р и м е р :

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; // число элементов массива

};