Sunteți pe pagina 1din 2

#include <cstdlib>

#include <iostream>
using namespace std;
class Complex
{
float re,im;
public: void f();
};
// pentru orice clasa compilatorul asigura- un constructor de initializare -fara
parametrii,
//
-un constructor de copiere
//
- un operator de atribuire
//
- un destructor
// constructorul de initializare se apeleaza -cind se aloca zona de memorie pt u
n obiect
// constructorul de copiere se apeleaza -cind se aloca zona de memorie pt un obi
ect si se initializeaza cu un obiect existent
// operatorul de atribuire se apeleaza cind se face operatia de atribuire
// destructorul se apeleaza cind se elibereaza zona de memorie a unui obiect
int main()
{ Complex C1; // se apeleaza constructorul de initializare implicit
// putem gandi C1.Complex()
Complex *p;// nu se apeleaza constructorul de initializare
p= new Complex; // se apeleaza constructorul de initializare implicit
Complex v[2]; // se apeleaza construtorul de initializare implicit de 2 ori
Complex C2=C1; // se apeleaza constructorul de copiere implicit
// putem gandi C2.Complex(C1);
p=new Complex(C1);// se apeleaza constructorul de copiere implicit
C2=C1; // se apeleaza opereatorul de atribuire
// putem gandi C2.=(C1);
{Complex C3;}// se apeleaza mai intai constructorul si mai apoi destructorul
// putem gandi C3.~Complex()
delete p; // se apeleaza destructorul
C2.~Complex();// destructorul se poate apela explicit
C1=C2;
C2=C1;//nu face verificarea-dar duce la erori
}
//constructorul de copiere si operatorul de atribuire impliciti copiaza BIT CU
BIT
// informatia din datele obiectului sursa in datele obiectuluidestinatie
// daca scriem un constructor de initializare - nu mai exista constructor de ini
tializare implicit
// daca scriem un constructor de copiere -nu mai exista -constructor de initiali
zare implicit
//
-constructor de copiere implicit
// constructorul de copiere se apeleaza
// 1. la delararea cu initializare ex: Complex C2=C1;
// 2. la transmiterea unui obiect prin valoare intr-o functie:

//
void f(Complex op){}
//
f(C1);
// 3. la intoarcerea unui obiect prin valoare dintr-o functie
// Complex f1(){ Complex ol; return ol;}
// f1();
// la transmiterea unui obiect prin referinta -nu se apeleaza constructorul de c
opiere
// la intoarcerea unui obiect prin referinta -nu se apeleaza constructorul de co
piere

S-ar putea să vă placă și