Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП 1-3 лекции.docx
Скачиваний:
5
Добавлен:
18.11.2019
Размер:
55.63 Кб
Скачать
    1. Конструкторы и деструктор

Конструкторы служат для создания экземпляров класса; при этом могут выполнять выделение памяти и инициализацию состояния класса. Если создаются статические данные, память под которые выделяется на этапе компиляции, тогда конструкторы могут только инициализировать состояние класса.

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

Типы конструкторов (в зависимости от следующих условий):

А) Что они делают (как выполняют инициализацию состояния класса):

  • пустой конструктор,

  • инициализирующие конструкторы,

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

Б) Кто их определяет:

  • конструкторы по умолчанию - только пустой и копирующий. Пустой конструктор по умолчанию только создает экземпляр класса, но не инициальзирует его.

  • явно определенные программистом - любые.

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

Деструктор служит для разрушения экземпляра класса. Может быть определен только один деструктор. Также существуют деструктор по умолчанию или явно определенный программистом.

План:

1. Объявление методов класса

2. Реализация класса: общие положения

3. Определение конструкторов: примеры

4. Определение методов класса

5. Использование класса

6. Примеры использования класса

    1. Объявление методов класса

Объявление конструкторов: отсутствует тип возвращаемого значения (конструктор ничего не возвращает); имя конструктора совпадает с именем класса.

Прототипы конструкторов:

  • пустой - имя_класса();

  • инициализирующие - имя_класса(тип имя_параметра, ...); тип - любой, кроме имени_класса

  • копирующий - имя_класса(const имя_класса &имя_параметра);

Объявление деструктора: также отсутствует тип возвращаемого значения (деструктор ничего не возвращает); имя деструктора совпадает с именем класса и начинается символом ~.

Прототип деструктора: ~ имя_класса ();

Объявление остальных методов: обычные прототипы функций С:

тип_возвращаемого_значения имя_функции(тип имя_параметра, ... );

При объявлении прототипов функций возможно задание значений параметров по умолчанию:

тип_возвращаемого_значения имя_функции(тип имя_параметра, ..., тип имя_параметра = значение, ... );

Если используются параметры по умолчанию, они должны быть указаны только один раз (обычно в прототипе функции) и только в конце списка параметров. В этом случае, если при вызове функции не указываются последние аргументы, в функцию передаются значения соответствующих параметров по умолчанию. Очень часто параметры по умолчанию используются в инициализирующих конструкторах.

Пример: класс Rational

class Rational{

private:

int num, den;

int gcd();

void reduce();

protected:

/* отсутствует: можно совсем не включать данную часть класса, вместе с ключевым словом */

public:

/* Конструкторы класса */

Rational();

Rational(int num); // 1

Rational(int num, int den); // 2

/* Деструктор класса */

~Rational();

/* Методы класса: селекторы */

void print();

Rational add(const Rational &opd);

/* Модификатор */

void assign(int x, int y);

};

В приведенном примере вместо двух конструкторов - 1 и 2 можно было указать один конструктор с параметром по умолчанию:

Rational(int num, int den = 1);