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

29

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

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

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

В С++ для упрощения процесса инициализации объектов предусмотрена специальная функция, называемая конструктором.

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

  1. Основное назначение – инициализация объектов.

- инициализация данных класса - задание им начальных

значений программно или по умолчанию,

- открытие файлов,

  • перевод видеосистемы в графический режим

  • вывод сообщения,

  • инициализация объектов вспомогательных классов и. т. д.

  1. Имя конструкторадолжно совпадать сименем класса.

3) Функция-конструктор не может возвращать результат, даже тип void не

допустим.

4) Функция автоматическивызывается при определении объекта, или при размещении в памяти объекта с помощью операцииnew.

  1. Формат определения конструктора в теле класса:

< имя класса> ( список формальных параметров)

{ операторы тела конструктора }

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

class T {

public:

T ( список параметров) ;

} ;

T::T( список параметров) { тело конструктора}

  1. Как правило, конструкторы объявляются в открытой части класса

  2. Конструктор может отсутствовать, при создании экземпляров класса

компилятор автоматически выделяет под них память, хотя в этом случае

данные не инициализируются, и будут содержать мусор.

8) В определении класса могут присутствовать несколько конструкторов.

Деструктор - это функция, которая автоматически выполняется, когда экземпляр класса уничтожается.

( либо при выходе объекта за пределы своей области видимости, либо при уничтожении динамического объекта операцией delete).

Назначение – выполнение завершающих действий (напр., закрытие файлов, установка видеосистемы в исходное состояние, написание каких-либо фраз и т.д.)

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

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

Формат компонентной функции-деструктора

~ имя класса ( ) { операторы тела деструктора};

  1. Между тильдой и именем класса нет пробелов.

  2. У деструктора нет типа результата даже void и нет параметров даже типаvoid.

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

<имя объекта>. ~ <имя класса> ( );

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

Рассмотрим класс Men, несущий в себе данные о возрасте и имени индивидуума.

Пусть в этом классе присутствуют и конструктор и деструктор.

В конструкторекроме инициализирующих действий имеется еще вывод контрольной строки.

Деструкторпусть также содержит вывод другой контрольной строки.

class Men{

char* name ;

int age;

public:

Men(char * n, int a) //встроенный конструктор

{ name = n; age = a;

cout<<name << “ - begin “<<endl;

}

void SetN (char*n) {name =n ; } //комп. функция для изменения данного

void SetA (int a) { age = a ;} //комп. функция для изменения другого данного

char* GetN ( ) { return name; } // компонентные функции

int GetA { return age; } //возвращающие значения данных

~Men ( ) { cout<< name<< “- end”<<endl;} // деструктор

#include <iostream.h>

#include<conio.h>