Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateC
C sharpCalculatoareCorel drawDot netExcelFox pro
FrontpageHardwareHtmlInternetJavaLinux
MatlabMs dosPascalPhpPower pointRetele calculatoare
SqlTutorialsWebdesignWindowsWordXml

Constructori si destructori in tehnica OOP

calculatoare



+ Font mai mare | - Font mai mic



Constructori si destructori in tehnica OOP

Constructori



Datele de tip predefinit sau definit de utilizator se aloca in mod automat, in conformitate cu declaratia sau definitia acestora. Odata cu alocarea datelor se pot face si initializari.

In cazul obiectelor, acestea se aloca la instantierea lor. De asemenea, obiectele pot fi initializate la instantiere. In acest scop, utilizatorul poate defini constructori, care sunt functii membru de acelasi nume cu numele clasei.  Se pot defini mai multi constructori pentru o clasa. In acest caz, ei sunt functii supraincarcate si difera prin numarul si/sau tipul parametrilor.

Un constructor fara parametrii se numeste constructor implicit. In cazul in care exista un constructor implicit, nu se mai poate defini pentru clasa respectiva un constructor cu toti parametrii impliciti. Un astfel de constructor duce la ambiguitate la instantierea obiectelor.

Prezenta constructorilor nu este obligatorie. Se pot defini clase si fara constructori. In acest caz, compilatorul C++ genereaza in mod automat un constructor fara parametrii, numit constructor implicit. Acesta are rol numai de alocare a obiectelor clasei respective. Constructorii definiti de programator sunt necesari numai in cazul in care se doreste initializarea obiectelor la instantierea lor.

In cazul in care o clasa are cel putin un constructor si nici unul nu este constructor implicit, atunci nu se pot instantia obiecte neinitializate.

Parametrii unui constructor pot fi de orice tip, cu exceptia tipului definit de clasa pentru care este functie membru. In schimb, constructorul unei clase poate avea ca parametrii pointeri sau referinte la obiectele clasei respective.

clasa(clasa p) //gresit

clasa(clasa *p) //corect

clasa(clasa &p) //corect

Constructorul

clasa (const clasa &p)

este un constructor special care permite copierea obictelor. El se numeste constructor de copiere. Constructorul de copiere poate avea si alti parametrii, insa ei trebuie sa fie impliciti.

Constructorul de copiere se apeleaza intr-o instantiere de felul celei de mai jos:

clasa c(); //instantiere cu initializare obisnuita

clasa c1=c, //se apeleaza constructorul de copiere. c1 este o copie a lui c

Destructori

Destructorii sunt functii care actioneaza in sens invers fata de constructori. Ei au multe caracteristici in comun cu constructorii, dar intre ei exista si diferente.

Numele unui destructor este numele clasei precedat de caracterul Un destructor nu are parametrii si el este unic pentru o clasa. Daca programatorul nu a definit un destructor, atunci compilatorul geneareaza un destructor pentru clasa respectiva.

Antetul destructorilor nu contine cuvantul void, desi ei nu returneaza valori. De aceea, destructorii au antetul:

~ nume_clasa()

In afara definitiei clasei, antetul destructorului va fi:

nume_clasa::~ nume_clasa()

Ca si in cazul constructorilor, adresa destructorilor nu poate fi determinata.

Daca la instantierea unui obiect s-au apelat mai multi constructori, atunci la distrugerea lui, destructorii se vor apela in ordine inversa.

Pentru un obiect global, destructorul se apeleaza ca parte a procedurii exit de la terminarea executiei functiei main. De aceea, un astfel de destructor nu trebuie sa apeleze functia exit deoarece se intra intr-un ciclu infinit. Pentru un obiect local, destructorul se apeleaza cand controlul programului iese din domeniul lui.

Obiectele dinamice nu pot fi distruse automat. Distrugerea se realizeaza de catre programator deoarece numai el stie cand un astfel de obiect nu mai este necesar. Destructorul poate fi apelat de catre programator atat direct cat si indirect prin intermediul operatorului delete.

Exemplu : Sa se realizeze o aplicatie pentru reprezentarea unui numar complex folosind constructori .

#include<iostream.h>

class complex

//constructor de initializare (constructorul implicit)

complex()

//constructor de initializare prin preluare (constructor de copiere)

complex(const complex& z)

//destructor

~complex()

void afisare(char* s)

};

void main()

Subiectul 4. Supraincarcarea operatorului apel de functie "( )"

Un operator remarcabil este operatorul standard de apel de functie, pe care limbajul il considera operator binar ce se evalueaza sub forma a(b), unde a este numele functiei, iar b este o lista de expresii eventual vida.

class matrice

//constructorul de initializare - dezvoltare

matrice::matrice(int i,int j)

//supraincarcarea operatorului apel de functie - dezvoltare

int* matrice::operator()(int i,int j)

//supraincarcarea operatorului "+" - dezvoltare

matrice operator+(matrice a,matrice b)



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 2353
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved