Jump to content

Recommended Posts

Posted

Constructorul reprezinta o metoda a clasei, care are acelasi nume ca al clase din care face parte. Constructorul nu returneaza nici o valoare, nici macar void. Nu se pot declara pointeri la constructor. Nu poate fi derivat(i.e. mostenit).

Tipuri de constructori:

-implicit: compilatorul ne asigura un constructor implicit.

Atunci cand declaram un obiect fara lista de parametri(ex: A x; unde A este clasa), sau cand este alocat dinamic, la fel fara lista de argumente(ex: new A, unde A este clasa), atunci constructorul implicit este apelat pentru a initializa obiectul.

Cand un vector de obiecte este declarat(de ex: A v[10]) sau cand este alocat dinamic(de ex: new A[10]), atunci constructorul implicit este apelat pentru a initializa toate elementele.

Cand constructorul unei clase derivate nu apeleaza explicit constructorul clasei de baza, atunci este apelat constructorul implicit din clasa de baza.

-cu mai multi parametri(sau unul singur)

-de copiere(defineste actiunile ce urmeaza a fi efectuate de compilator atunci cand se efectueaza o copiere a obiectelor de tipul clasei date. Are un singur parametru formal, care e de tipul clasei(ex: A(A ob) )

-dinamic: atunci cand alocam memorie obiectelor cu new

-de conversie: constructorii de conversie inseamna pentru compilator crearea de obiecte din alte obiecte. Acest tip de constructor este diferit de constructorul de copiere pentru ca acesta creaza un obiect din alta clasa, dar constructorul de copiere este din aceeasi clasa.

Destructorul reprezinta o metoda a clasei care este apelata la sfarsitul programului cand se distrug toate obiectele. Are acelasi nume ca al clasei din care face parte precedat de un "~" in fata. Nu pot fi declarati pointeri la un destructor, nu poate fi derivat.

Este apelat la sfarsitul programului cand obiectele sunt distruse. In cazul alocarii dinamice, acesta va elibera memoria alocata cu new.

In cazul pointerilor avem : delete p;

in cel al listelor, resp.t vectorilor: delete [] p;

Mai jos avem un exemplu de stiva folosind constructor si destructor.

#include<iostream>

using namespace std;

class stiva

{

	int st[80];

	int valoare;

public:

	stiva(); //constructor

	~stiva(); //destructor

	void push(int i);

	int pop();

};

//functia constructor pentru stiva

stiva::stiva()

{

	valoare=0;

	cout<<"stiva a fost initializata!";

}

//functia destructor pentru stiva

stiva::~stiva()

{

	cout<<"stiva a fost distrusa!";

}

void stiva::push(int i)

{

	if(valoare==80)

		cout<<"stiva plina. nu pot pune mai multe elemente";

	else

		st[valoare]=i;

	valoare++;

}

int stiva::pop()

{

	if(valoare==0)

		cout<<"stiva vida. nu am ce elemente sa scot";

	else

		valoare--;

	return st[valoare];

}

int main()

{

	stiva obiect1, obiect2; //apeleaza constructorul pentru obiectele obiect1 si obiect2

	obiect1.push(1); //obs cum este apelata metoda in main

	obiect1.push(4);

	obiect1.push(6);

	obiect1.push(3);

	obiect2.push(2);

	obiect2.push(7);

	obiect2.push(12);

	cout<<obiect1.pop()<<" ";

	cout<<obiect1.pop()<<" ";

	cout<<obiect1.pop()<<" ";

	cout<<obiect2.pop()<<" ";

	cout<<obiect2.pop()<<" ";

	cout<<obiect2.pop()<<" ";

	system("PAUSE");

	return 0;

}

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.