24 Понятия конструкторов и деструкторов.

Это спец. ф-ции, котпред. каким образомобъекты класса созд., иниц. или разруш.

class X{int n;

X();конструктор

~X();//деструктор}

Констр-р - метод, вызываемый при создании класса. Деструктор - при уничтожении.

X::X(){new int[100];}

X::~X(){delete n;}

1) Констр-р и дестр. не им. объявл. знач-й возврата

2)не м.б. унаследованы; хотя произв. классы д. вызв. констр-ры и дестр-ры баз. класса

3)дестр. м. им. атрибут virtual, констр. - нет.

4)нельзя работать с адр. констр. и дестр.

class X;

void *ptr=(void*)X::X();// нельзя

Если конструктор и дестр. не были определены явно, то они генер. С++. Они также м.б. запущены при отсутствии явного вызова в проге. Каждый К или Д, созданный конст. будет public.

X a;

a::X();//нельзя вызвать явно

a::~X();//нельзя вызвать явно

a.X();// правильно

a.~X();// правильно

При опр. или разруш. объектов компилятор вып-ет вызов К и Д автоматически. Конструктор опред-ся при созд-и лок. и врем. объектов, дестр-р - когда объект выз. из обл. действия.

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

f(Cstring String);

f(Cstring, csstr("file.bmp"));

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

class X{int a; X(){}; X(int b){a=b;}X x(10),}

Деструкторы

Вызыв. для освобожд-я Эл-в до разруш-я самого объекта. Вызов Д вып-сянеявно, когда переем. выходят из своей объявленной области. Для глоб переем-х Д вызыв. после вызода из ф-и main. Когда указ-km объекта выходит за пределы обл. действия, вызов Д не происходит. Для разрушения такого объекта опер-я delete д.б. задана явно. Д вызыв. в обратной вызову конструкторов последовательности.

f(){X *pX.new X; delete pX;}

При заверш-и прогр. exit Д м. вызываться даже для глоб. перем.

Hosted by uCoz