3.2. No?iune de constructor ?i destructor

3.2. No?iune de constructor ?i destructor

La prima vedere, clasa fractie_rationala din exemplul de mai sus nu are nici o func?ie membr?. Totu?i, c?teva func?ii speciale au fost create implicit de c?tre compilator. Una dintre ele este constructorul f?r? parametri al clasei ?i are denumirea fractie_rationala().

A doua func?ie este destructorul clasei ?i are denumirea ~fractie_rationala(). Alt? func?ie creat? implicit – constructorul de copiere – va fi discutat? ?n 3.5.

Existen?a func?iilor create implicit o putem demonstra modific?nd ?n exemplul precedent doar func?ia main() astfel:

void main()
{
   // crearea obiectului cu apelul evident al constructorului
   fractie_rationala fr1=fractie_rationala();
 
   fractie_rationala fr2; // crearea obiectului cu apelul
                          // implicit al constructorului
   fr2 = fractie_rationala();// atribuirea obiectului fr2
                             // unui obiect creat temporar
                             // prin apelul constructorului
   fr1 = fr2;
   fr1.~fractie_rationala(); // apelul explicit al
                             // destructorului pentru
                             // obiectul fr1
   fr2.~fractie_rationala(); // apelul explicit al
                             // destructorului pentru fr2
   char c; 
   cin >> c;
}

 


Re?ine?i c?:

   fractie_rationala fr3();

nu este crearea obiectului fr3, ci declararea prototipului unei func?ii fr3 care ?ntoarce, ca rezultat, un obiect de tipul fractie_rationala.

La crearea oric?rui obiect va fi apelat? func?ia constructor. Dac? acest lucru nu va fi f?cut direct de c?tre programator, el va fi f?cut implicit de c?tre compilator. Iar la distrugerea oric?rui obiect va fi apelat? implicit func?ia destructor.

Constructorul este func?ia membr? special? a clasei, destinat? pentru ini?ializarea fiec?rui obiect al acestei clase dup? repartizarea memoriei la crearea lui.

Denumirea func?iei constructor ?ntotdeauna coincide cu denumirea clasei. Prin aceasta ea ?i devine constructor. O clas? poate s? posede mai mul?i constructori, care trebuie s? difere prin lista parametrilor.

 

Destructorul este func?ia membr? special? a clasei, destinat? pentru efectuarea unor lucr?ri ad?ug?toare care pot fi necesare ?nainte de eliberarea memoriei la distrugerea fiec?rui obiect al clasei, c?nd expir? termenul lui de „via??”.

Denumirea destructorului coincide cu denumirea clasei prefixat? de caracterul ~. Anume prin aceasta func?ia membr? devine destructor. Orice clas? poate s? posede doar un singur destructor ?i el, la r?ndul lui, nu poate s? posede parametri. Denumirea pentru destructor provine de la notarea operatorului ~ (complement fa?? de 1, NOT) din limbajul C, ?n sens c? „destructorul este complementul constructorului”.

De exemplu, la clasa care se nume?te punct constructorii vor fi punct(), iar destructorul ~punct(), la clasa care se nume?te caseta_de_dialog constructorii vor fi caseta_de_dialog(), iar destructorul ~caseta_de_dialog() etc.

Constructorul ?i destructorul implici?i nu fac nimic, ei pur ?i simplu vor fi apela?i automat: respectiv, la crearea obiectului ?i la distrugerea lui. De fapt, constructorul mai are ?i o destina?ie, legat? de func?iile virtuale, care va fi explicat? mai t?rziu.
_________________________
Autorul: dr.conf. S. Pereteatcu

рассказать друзьям и получить подарок

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов