Петров -begin

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

};

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

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

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

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

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

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>

void main () {

/* создание экземпляра класса по имени:

конструктор автоматически вызывается при создании объекта, и т.к. наш конструктор требует двух параметров, то в строке создания объекта (или в строке вызова конструктора) необходимо указать оба параметра, которые и инициируют создаваемый объект m1 */

Men m1 (“Петров”, 34);

/* создается объект,параметры конструктора инициализируют

переменную m1 (объект) */

/* Men m1; - уже не верно!

т.к. в классе нет конструктора без параметров,т.е. в этом

случае нельзя создать неинициализированный объект * /

/* создание экземпляра класса с помощью указателя:

параметры конструктора инициализируют динамически выделенный участок памяти под объект типа Men*/

Men * m2 = new Men (“Рощин ”, 25);

cout<<m1. GetN ()<< “ “ << m1. GetA() << endl;

cout<< m2->GetN() << “ “ << m2-> GetA () << endl;

getch();

}

Результат:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: