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

Конструктори и деструктори су специјалне методе класе који се имплицитно позивају на почетку (конструктор) и на крају (деструктор) животног века објекта неке класе. Имају потпуно исто име као и класа (деструктор има знак ~ испред имена) и не смеју да враћају никакав тип, чак ни void. Декларисање конструктора или деструктора може да се изостави, али у том случају сам преводилац ће генерисати тзв. подразумевани конструктор, односно подразумевани деструктор.

Намена конструктора је да изврши све што је неопходно да би се објекат неке класе, на почетку његовог „живота“, довео у „радно“ стање. То може бити, на пример, иницијализација неких унутрашњих чланова података, заузимање меморије за неке потребе објекта и слично. Конструктор се може и преклопити, што практично значи да класа може да има више конструктора.

Намена деструктора је управо супротна намени конструктора. Он мора да „почисти“ за објектом, односно да изврши све што је потребно урадити када објекат престаје да „живи“. На пример, да ослободи меморију коју је конструктор заузео на почетку и слично.

Подразумевани конструктор

Ако у класи постоји конструктор који може да се позива без аргумената (који нема ниједан параметар или чији сви параметри имају подразумеване вредности аргумената), позиваће се кад год се ствара објекат без иницијализатора. Такав конструктор се зове подразумевани конструктор. Ако не постоји ниједан конструктор, подразумевани конструктор се генерише са празним телом, и то као јаван конструктор. Ово генерисање конструктора аутоматски обавља преводилац, уколико није подразумевани конструктор није дефинисан у класи. Подразумевани конструктор се МОРА дефинисати ако у класи постоје показивачка поља, ако ништа друго да би се показивачи иницијализовали на нуле!

Конструктор копије

Конструктор копије позива се једним аргументом типа своје класе. Тај параметар мора да буде упућивач на непроменљиве примерке класе. Конструктор копије служи за иницијализацију класе копијама садржаја других објеката истог типа. Ако није дефинисан конструктор копије, он се генерише аутоматски тако да копира сва поља објекта који се наводи као иницијализатор у објекат који се ствара. Ако су нека поља показивачи аутоматски генерисани конструктор копије копираће само показиваче, али неће правити копије показиваних објеката => ако класа поседује показивачка поља конструктор копије се МОРА дефинисати!

Конструктор конверзије

Конструктор конверзије је конструктор који може да се позове једним аргументом чији тип није једнак посматраној класи.
пример:

class Kompl
{
double re,im;
public:
Kompl (double r=0,double i=0){re=r;im=i;} //istovremeno:
//podrazumevani - ako se pozove bez parametara
// konstruktor konverzije - ako se pozove sa jednim parametrom
//konstruktor
...
};
Kompl z(1.2); // konverzija realnog broja u kompleksan broj

Деструктори

Деструктори су методе намењене уништавању објекта. Позивају се аутоматски кад год се појави потреба за уништавањем било које врсте објеката. После примене деструктора на неки објекат он изгуби обележја своје класе. Класа има само један деструктор. Деструктор нема параметре. Обавезно га је дефинисати у класама које имају показивачка поља!

Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s