Разлика между конструктор и разрушител

Автор: Laura McKinney
Дата На Създаване: 1 Април 2021
Дата На Актуализиране: 12 Може 2024
Anonim
САМЫЙ БОЛЬШОЙ НАБОР В МИРЕ! - LEGO STAR WARS Millennium Falcon 2017
Видео: САМЫЙ БОЛЬШОЙ НАБОР В МИРЕ! - LEGO STAR WARS Millennium Falcon 2017

Съдържание


Конструктор и деструктор са функциите на члена със същото име като техния клас. Бившият тип конструктор помага при инициализиране на обект. Обратно, a пещ за горене на отпадъци е различен от конструктора, който изтрива създадения конструктор, когато няма полза.

Понякога се изисква да се инициализира някаква част от обект, преди той да бъде използван. Например, ние работим върху стека, преди да извършим каквото и да е действие, горната част на стека винаги трябва да бъде настроена на нула. Тази функция на автоматична инициализация се осъществява чрез „Конструктор“. Например, ако един обект трябва да изпълни някакъв код, преди той да бъде унищожен. Например, ако обект трябва да затвори файл, който е отворил, преди унищожаването му. Може да се извърши с помощта на „Destructor“.

Нека разгледаме някои от основните разлики между конструктор и деструктор с помощта на сравнителна диаграма

  1. Сравнителна диаграма
  2. дефиниция
  3. Ключови разлики
  4. заключение

Сравнителна диаграма:

Основа за сравнениеконструкторпещ за горене на отпадъци
Предназначение

Той разпределя паметта на обект.Той раздава паметта на обект.
декларация class_name (аргументи, ако има) {};~ class_name (без аргументи) {};
Аргументи Конструктор приема аргумент Destructor не приема никакъв аргумент.
повикванеКонструкторът се извиква автоматично, докато обектът е създаден.Деструкторът се извиква автоматично, тъй като блокът излиза или програмата се прекратява.
работнатаConstructor позволява на обект да инициализира част от стойността си преди, той се използва.Destructor позволява на обект да изпълни някакъв код в момента на неговото унищожаване.
Ред за изпълнение

Конструкторите се извикват в последователен ред.
Деструкторите се извикват в обратен ред на конструктора.
В числа В клас може да има множество конструктори.Винаги има един деструктор в класа.
Конструктор за копиране Копиращият конструктор позволява на конструктор да декларира и инициализира обект от друг обект.Няма такава концепция.
Над зареждане Конструкторите могат да бъдат претоварени.Деструкторът не може да бъде претоварен.


Определение за конструктор:

А конструктор е основно член функция на клас, която инициализира обекта и му разпределя памет. Конструкторите могат лесно да бъдат идентифицирани, тъй като са декларирани и дефинирани със същото име като това на класа. Конструкторът няма никакъв тип връщане; така че те не връщат нищо, дори „невалидни“. Конструктор винаги е дефиниран в публичния раздел на клас.

В клас може да има множество конструктори; те могат да бъдат разграничени въз основа на броя и вида на аргументите, които са предадени. Ако в клас има множество конструктори; неявен конструктор (конструктор без нищо) трябва да бъде определен заедно с тях; тя не прави нищо друго освен, удовлетворява компилатора.

Конструкторите също могат да бъдат определени с аргументите по подразбиране. Докато те също инициализират обекта „динамично“. Конструкторите не могат да се наследят, нито могат да бъдат виртуални, но могат да бъдат претоварени. Те не могат да бъдат насочени към техния адрес.


Видове конструктори

Основно има три типа конструктори - по подразбиране, параметризирани и копиращи конструктори.

  • Конструктор по подразбиране: Това е конструктор, където не се дава аргумент на конструктора. Конструкторът по подразбиране няма параметър, но стойностите към конструктора по подразбиране могат да бъдат предадени по подразбиране (динамично).
  • Параметризиран конструктор: Този тип конструктори вземат аргументите; можем да предаваме различни стойности на членовете на данните като аргументи.
  • Конструктор за копиране: Конструкторът на копиране е различен от другите типове конструктори, защото приема адреса на другия обект като аргумент.

Изпълнение на конструктор:

клас Const {int a, b; public: Const () // конструктор без параметър {a = 0; б = 0; } Const (int c, int d) {// конструктор с параметър a = c; с = г; }}; int main () {Const C1; С2 (10,20); // това изявление се позовава на конструктор}

Когато C1 е създаден, конструктор без параметър не се изпълнява, тъй като C1 не предава нито един параметър. Като има предвид, че когато C2 е създаден, конструктор с параметър се изпълнява, тъй като той предава две цели числа на конструктора.

Дефиниция на Destructor:

А пещ за горене на отпадъци е също член функция на клас, който раздава паметта, разпределена на даден обект. Определя се със същото име като това на клас, предхождано от a тилда (~) символ. Деструкторите винаги се извикват в обратен ред на конструкторите.

Винаги има един деструктор в клас, тъй като той не приема никакви аргументи. Локалните обекти се унищожават веднага щом контролът върху изпълнението остави блока; от друга страна, глобалните обекти се унищожават, когато цялата програма се прекрати. Компилаторът имплицитно се нарича деструктор. Ако класовете са наследени и клас е производен от родителски клас, и двете клас деца и родителски клас имат деструктори; тогава деструкторът на производен клас се извиква първо, следван от деструктора на родителския клас.

Изпълнение на Destructor:

клас Const {int a, b; public: Const (int c, int d) // конструктор с параметър. {a = c; с = г; cout << "стойности на a и b са" <<>

Когато се създаде обект C1, се извиква конструктор с два параметъра от цяло число и членът „a, b“ се инициализира и стойността на „a, b“ се редактира. След това разрушителят се извиква и „обектът C1 се унищожава“.

Нужда от разрушител

Създаването на конструктора изразходва известно количество памет, тъй като в крайна сметка разпределя паметта на обектите. Тази разпределена памет трябва да се раздели преди да се унищожат обектите, за да се освободят ресурсите за други задачи. Разрушителите са изключително полезни по предназначение, което ефективно унищожава обектите и изпълнява задачи за почистване за освобождаване на паметта.

  1. Основната цел на конструктора е да разпределя памет на обектите, когато те са създадени. За разлика от тях, основната цел на деструктора е да разпредели паметта на обекта, когато той е унищожен.
  2. Конструктор може да приеме аргументите, тъй като аргументите могат да бъдат използвани за инициализиране на членовете на данните от класа. От друга страна, разрушителят не приема никакви аргументи, тъй като единствената му работа е да разсее паметта на обекта.
  3. Когато се създава обект, се извиква конструктор. За разлика от тях се извиква разрушител при прекратяване на програмата или излизане от блока, в който е създаден обект.
  4. Обикновено конструктор се използва за инициализиране на данните членове на класа, докато деструктор се използва, за да позволи на обекта да извърши някакво действие, преди да бъде унищожен.
  5. Конструкторите се изпълняват в последователния ред, което означава, че ако има производен клас, който наследява базовия клас и обектът на извлечения клас е създаден, тогава той ще извика първо конструктора на базовия клас, а след това и конструктора на производния клас. И обратно, деструкторът на производен клас се нарича първо, а след това базовият клас, това означава, че деструкторът се изпълнява в обратен ред на конструктора.
  6. В клас може да има множество конструктори, които се идентифицират по предаваните аргументи, докато той може да има само един разрушител.
  7. Има концепция за конструктор на копия, която позволява на обект да се инициализира от друг обект, докато деструкторът няма такава концепция.
  8. Конструкторите могат да бъдат претоварени, за да изпълняват различни действия под името на един и същ конструктор. Напротив, деструкторите не могат да бъдат претоварени.

Заключение:

Освен приликата, че конструкторът и деструкторът са специалните функции на член на клас и притежават едно и също име, съществената разлика между тях е: „конструктор“ се нарича по време на разпределението на паметта и „деструктор“ се извиква при време на разместване на паметта на обектите. И конструкторът, и деструкторът имплицитно се наричат ​​от компилатор, въпреки че не са дефинирани в класа.