Sunteți pe pagina 1din 10

RELATII CARE SE STABILESC INTRE DOUA CLASE DISTINCTE: IS-A (ESTE O....) HAS-A(ARE...

)
HAS-A
RELATIA DE HAS-A SE STABILESTE INTRE DOUA CLASE DISTINCTE, ATUNCI CAND O CLASA CONTINE
OBIECTE DE TIPUL ALTEI CLASE CA SI ATRIBUTE
ex: clasa facultate contine ca si atribut un vector de obiecte de tipul clasei student
ex: clasa facultate contine ca si atribut un vector de obiecte de tipul clasei cadreDidactice
ex: clasa facultate contine ca si atribut un obiect de tipul clasei decan

RELATIA DE HAS-A ESTE DE MAI MULTE TIPURI:


1. RELATIA DE HAS-A ONE-TO-ONE este atunci cand o clasa contine un singur obiect de tipul altei
clase
ex: clasa facultate contine ca si atribut un obiect de tipul clasei decan

class Decan
{
....
};
class Facultate
{
....
Decan decanFacultate;
};

2. RELATIA DE HAS-A ONO-TO-MANY este atunci cand o clasa contine mai multe obiecte de tipul altei
clase
ex: clasa facultate contine ca si atribut un vector de obiecte de tipul clasei student
ex: clasa facultate contine ca si atribut un vector de obiecte de tipul clasei cadreDidactice

RELATIE DE HAS-A ONE-TO-MANY folosind un vector de obiecte


class Student
{
....
};

class Facultate
{
....
Student* vectorStudent;
};

RELATIE DE HAS-A ONE-TO-MANY folosind un vector de pointeri la obiecte


class Student
{
....
};
class Facultate
{
....
Student** vectorStudent;
};

RELATIE DE HAS-A ONE-TO-MANY folosind un vector de pointeri la obiecte


un mall are mai multe magazine in el, deci putem sa facem o relatie de has-a one-to-many

vector de pointeri la obiecte


in vector urmeaza sa pun pointeri la obiecte
this->vectorPointeriMagazine = new Magazin * [this->nrMagazine];
+a doua alocare de memorie

vector de obiecte
in vector urmeaza sa pun obiecte
this->vectorPointeriMagazine = new Magazin[this->nrMagazine];

class Mall
{
string denumireMall;
int nrMagazine;
Magazin** vectorPointeriMagazine;
public:

Mall()
{
this->denumireMall = "Necunoscuta";
this->nrMagazine = 0;
this->vectorPointeriMagazine = NULL;
}

Mall(string denumireMall, int nrMagazine, Magazin** vectorPointeriMagazine)


{
this->denumireMall = denumireMall;
this->nrMagazine = nrMagazine;

1.ALOCARE DE MEMORIE PENTRU VECTORUL IN SINE (VECTORUL CARE ARE CA SI


NUMARATOR int nrMagazine)
this->vectorPointeriMagazine = new Magazin*[this->nrMagazine];

2.ALOCARE DE MEMORIE PENTRU FIECARE POINTER IN PARTE DIN FIECARE POZITIE A


VECTORULUI ANTERIOR
for (int i = 0; i < this->nrMagazine; i++)
{
this->vectorPointeriMagazine[i] = new Magazin(*vectorPointeriMagazine[i]);
}
}

Getteri
string getDenumireMall()
{
return this->denumireMall;
}

int getNrMagazine()
{
return this->nrMagazine;
}

Magazin** getVectorPointeriMagazine()
{
return this->vectorPointeriMagazine;
}

Destructor
~Mall()
{
//1)dezalocam memoria pentru fiecare pointer in parte din fiecare pozitie din vector
for (int i = 0; i < this->nrMagazine; i++)
{
delete this->vectorPointeriMagazine[i];
}

//2)dezalocam memoria pentru vectorul suport


delete[] this->vectorPointeriMagazine;
}

Setteri

void setDenumireMall(string denumireMallNoua)


{
this->denumireMall = denumireMallNoua;
}

void setPointeriMagazine(int nrMagazineNou,Magazin** vectorPointeriMagazineNou)


{
//1)dezalocam memoria pentru fiecare pointer in parte din fiecare pozitie din vector
for (int i = 0; i < this->nrMagazine; i++)
{
delete this->vectorPointeriMagazine[i];
}
2)dezalocam memoria pentru vectorul suport
delete[] this->vectorPointeriMagazine;

this->nrMagazine = nrMagazineNou;

1.ALOCARE DE MEMORIE PENTRU VECTORUL IN SINE (VECTORUL CARE ARE CA SI


NUMARATOR int nrMagazine)
this->vectorPointeriMagazine = new Magazin * [this->nrMagazine];

2.ALOCARE DE MEMORIE PENTRU FIECARE POINTER IN PARTE DIN FIECARE POZITIE A


VECTORULUI ANTERIOR
for (int i = 0; i < this->nrMagazine; i++)
{
this->vectorPointeriMagazine[i] = new
Magazin(*vectorPointeriMagazineNou[i]);
}
}

Mall(const Mall& obj)


{
this->denumireMall = obj.denumireMall;
this->nrMagazine = obj.nrMagazine;

1.ALOCARE DE MEMORIE PENTRU VECTORUL IN SINE (VECTORUL CARE ARE CA SI


NUMARATOR int nrMagazine)
this->vectorPointeriMagazine = new Magazin * [this->nrMagazine];

2.ALOCARE DE MEMORIE PENTRU FIECARE POINTER IN PARTE DIN FIECARE POZITIE A


VECTORULUI ANTERIOR
for (int i = 0; i < this->nrMagazine; i++)
{
this->vectorPointeriMagazine[i] = new
Magazin(*obj.vectorPointeriMagazine[i]);
}
}

Mall& operator=(const Mall& obj)


{
if (this != &obj)
{
1)dezalocam memoria pentru fiecare pointer in parte din fiecare pozitie din
vector
for (int i = 0; i < this->nrMagazine; i++)
{
delete this->vectorPointeriMagazine[i];
}
2)dezalocam memoria pentru vectorul suport
delete[] this->vectorPointeriMagazine;
this->denumireMall = obj.denumireMall;
this->nrMagazine = obj.nrMagazine;

1.ALOCARE DE MEMORIE PENTRU VECTORUL IN SINE (VECTORUL CARE ARE


CA SI NUMARATOR int nrMagazine)
this->vectorPointeriMagazine = new Magazin * [this->nrMagazine];
2.ALOCARE DE MEMORIE PENTRU FIECARE POINTER IN PARTE DIN FIECARE
POZITIE A VECTORULUI ANTERIOR
for (int i = 0; i < this->nrMagazine; i++)
{
this->vectorPointeriMagazine[i] = new
Magazin(*obj.vectorPointeriMagazine[i]);
}
}
return *this;
}

METODA ADAUGA
sa se adauge in mall un nou magazin
void adaugaElementInVectorulDePointeriMagazine(Magazin* magazinNou)
{
Mall copie = *this;

1)dezalocam memoria pentru fiecare pointer in parte din fiecare pozitie din vector
for (int i = 0; i < this->nrMagazine; i++)
{
delete this->vectorPointeriMagazine[i];
}

2)dezalocam memoria pentru vectorul suport


delete[] this->vectorPointeriMagazine;

this->nrMagazine++;

this->vectorPointeriMagazine = new Magazin * [this->nrMagazine];

for (int i = 0; i < copie.nrMagazine; i++)


{
this->vectorPointeriMagazine[i] = new
Magazin(*copie.vectorPointeriMagazine[i]);
}

this->vectorPointeriMagazine[this->nrMagazine - 1] = new Magazin(*magazinNou);

}
Operatorul <<
friend ostream& operator<<(ostream& out, Mall& obj)
{
out << obj.denumireMall << endl;
out << obj.nrMagazine << endl;
out << "Magazine:" << endl;
for (int i = 0; i < obj.nrMagazine; i++)
{
out << *obj.vectorPointeriMagazine[i] << endl << endl;
}
return out;
}

Operatorul >>
friend istream& operator>>(istream& in, Mall& obj)
{
1)dezalocam memoria pentru fiecare pointer in parte din fiecare pozitie din vector
for (int i = 0; i < obj.nrMagazine; i++)
{
delete obj.vectorPointeriMagazine[i];
}

2)dezalocam memoria pentru vectorul suport


delete[] obj.vectorPointeriMagazine;

cout << "Introduceti denumire mall:";


in >> obj.denumireMall;

cout << "Introduceti nr de magazine din mall:";


in >> obj.nrMagazine;

cout << "Introduceti magazinele din mall:" << endl;

obj.vectorPointeriMagazine = new Magazin * [obj.nrMagazine];

for (int i = 0; i < obj.nrMagazine; i++)


{
obj.vectorPointeriMagazine[i] = new Magazin();
in >> *obj.vectorPointeriMagazine[i];
}

return in;
}

Operatorul -=
sa se elimine un magazin din mall dupa pozitia lui din vector
Mall& operator-=(int pozitieDorita)
{
Mall copie = *this;

1)dezalocam memoria pentru fiecare pointer in parte din fiecare pozitie din vector
for (int i = 0; i < this->nrMagazine; i++)
{
delete this->vectorPointeriMagazine[i];
}

2)dezalocam memoria pentru vectorul suport


delete[] this->vectorPointeriMagazine;

this->nrMagazine--;

this->vectorPointeriMagazine = new Magazin * [this->nrMagazine];

for (int i = 0; i < pozitieDorita; i++)


{
this->vectorPointeriMagazine[i] = new
Magazin(*copie.vectorPointeriMagazine[i]);
}

for (int i = pozitieDorita + 1; i < copie.nrMagazine; i++)


{
this->vectorPointeriMagazine[i-1] = new
Magazin(*copie.vectorPointeriMagazine[i]);
}

return *this;
}

Operatorul de indexare
sa se afiseze un magazin din mall la alegere
Magazin* operator[](int pozitieDorita)
{
return this->vectorPointeriMagazine[pozitieDorita];
}
};

Void main
{
cout << endl << endl << endl;
cout << "-------------------------- CLASA MALL ---------------------------------------" << endl << endl;
Mall mall1;
cout << "Denumire mall:" << mall1.getDenumireMall() << endl;
cout << "Nr magazine mall:" << mall1.getNrMagazine() << endl;
cout << "Magazine:" << endl;
for (int i = 0; i < mall1.getNrMagazine(); i++)
{ cout << mall1.getVectorPointeriMagazine()[i] << endl << endl; }
cout << endl << endl << endl;

Magazin** vectorPointeriMag1;
vectorPointeriMag1 = new Magazin * [3];
vectorPointeriMag1[0] = new Magazin(m1);
vectorPointeriMag1[1]= new Magazin(m2);
vectorPointeriMag1[2]= new Magazin(m5);

Mall mall2("AFI", 3, vectorPointeriMag1);


cout << "Denumire mall:" << mall2.getDenumireMall() << endl;
cout << "Nr magazine mall:" << mall2.getNrMagazine() << endl;
cout << "Magazine:" << endl;
for (int i = 0; i < mall2.getNrMagazine(); i++)
{ cout << *mall2.getVectorPointeriMagazine()[i] << endl << endl; }
cout << endl << endl << endl;

Magazin** vectorPointeriMag2;
vectorPointeriMag2 = new Magazin * [2];
vectorPointeriMag2[0] = new Magazin(m6);
vectorPointeriMag2[1] = new Magazin(m5);

mall1.setDenumireMall("Promenada");
mall1.setPointeriMagazine(2, vectorPointeriMag2);

cout << "-----------MALL1 DUPA APELAREA SETTERILOR------------" << endl << endl;
cout << "Denumire mall:" << mall1.getDenumireMall() << endl;
cout << "Nr magazine mall:" << mall1.getNrMagazine() << endl;
cout << "Magazine:" << endl;
for (int i = 0; i < mall1.getNrMagazine(); i++)
{ cout << *mall1.getVectorPointeriMagazine()[i] << endl << endl; }
cout << endl << endl << endl;

cout << "-----------constructorul de copiere------------" << endl << endl;


Mall mall3 = mall1;
cout << "Denumire mall:" << mall3.getDenumireMall() << endl;
cout << "Nr magazine mall:" << mall3.getNrMagazine() << endl;
cout << "Magazine:" << endl;
for (int i = 0; i < mall3.getNrMagazine(); i++)
{ cout << *mall3.getVectorPointeriMagazine()[i] << endl << endl; }
cout << endl << endl << endl;

cout << "-----------operatorul egal------------" << endl << endl;

cout << "OBIECTELE INAINTE DE APELAREA OP =" << endl << endl;

cout << "MALL3:" << endl << endl;


cout << "Denumire mall:" << mall3.getDenumireMall() << endl;
cout << "Nr magazine mall:" << mall3.getNrMagazine() << endl;
cout << "Magazine:" << endl;
for (int i = 0; i < mall3.getNrMagazine(); i++)
{ cout << *mall3.getVectorPointeriMagazine()[i] << endl << endl; }
cout << endl << endl << endl;
cout << "MALL2:" << endl << endl;

cout << "Denumire mall:" << mall2.getDenumireMall() << endl;


cout << "Nr magazine mall:" << mall2.getNrMagazine() << endl;
cout << "Magazine:" << endl;
for (int i = 0; i < mall2.getNrMagazine(); i++)
{ cout << *mall2.getVectorPointeriMagazine()[i] << endl << endl; }
cout << endl << endl << endl;

mall3 = mall2;
cout << "OBIECTELE dupa Apelarea OP =" << endl << endl;
cout << "MALL3:" << endl << endl;

cout << "Denumire mall:" << mall3.getDenumireMall() << endl;


cout << "Nr magazine mall:" << mall3.getNrMagazine() << endl;
cout << "Magazine:" << endl;
for (int i = 0; i < mall3.getNrMagazine(); i++)
{ cout << *mall3.getVectorPointeriMagazine()[i] << endl << endl; }
cout << endl << endl << endl;

cout << "MALL2:" << endl << endl;


cout << "Denumire mall:" << mall2.getDenumireMall() << endl;
cout << "Nr magazine mall:" << mall2.getNrMagazine() << endl;
cout << "Magazine:" << endl;
for (int i = 0; i < mall2.getNrMagazine(); i++)
{ cout << *mall2.getVectorPointeriMagazine()[i] << endl << endl; }
cout << endl << endl << endl;

cout << "-----------metoda adauga------------" << endl << endl;


cout << "MALL2 inainte de metoda adauga:" << endl << endl;

cout << "Denumire mall:" << mall2.getDenumireMall() << endl;


cout << "Nr magazine mall:" << mall2.getNrMagazine() << endl;
cout << "Magazine:" << endl;
for (int i = 0; i < mall2.getNrMagazine(); i++)
{ cout << *mall2.getVectorPointeriMagazine()[i] << endl << endl;} }
cout << endl << endl << endl;

mall2.adaugaElementInVectorulDePointeriMagazine(&m4);
cout << "MALL2 dupa metoda adauga:" << endl << endl;

cout << "Denumire mall:" << mall2.getDenumireMall() << endl;


cout << "Nr magazine mall:" << mall2.getNrMagazine() << endl;
cout << "Magazine:" << endl;
for (int i = 0; i < mall2.getNrMagazine(); i++)
{ cout << *mall2.getVectorPointeriMagazine()[i] << endl << endl; }
cout << endl << endl << endl;

cout << "-----------operatorul << de afisare------------" << endl << endl;


cout << mall1 << endl << endl << endl;

cout << "-----------operatorul >> de citire de la tastatura------------" << endl << endl;
//cin >> mall1;

cout << endl << endl;


cout << mall1 << endl << endl << endl;

cout << "-----------operatorul []------------" << endl << endl;


cout << "Magazinul de pe pozita 1 din mall1 este:" << endl<<*mall1[1] << endl << endl;

cout << "-----------operatorul -= ------------" << endl << endl;

cout << "MALL 2 inainte de op -=" << endl << mall2 << endl << endl;

mall2 -= 1;

cout << "MALL 2 dupa op -=" << endl << mall2 << endl << endl;
}

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