Documente Academic
Documente Profesional
Documente Cultură
Has A, Is A
Has A, Is A
)
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
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
class Facultate
{
....
Student* vectorStudent;
};
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;
}
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];
}
Setteri
this->nrMagazine = nrMagazineNou;
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];
}
this->nrMagazine++;
}
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];
}
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];
}
this->nrMagazine--;
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);
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 << "OBIECTELE INAINTE DE APELAREA OP =" << endl << endl;
mall3 = mall2;
cout << "OBIECTELE dupa Apelarea OP =" << endl << endl;
cout << "MALL3:" << endl << endl;
mall2.adaugaElementInVectorulDePointeriMagazine(&m4);
cout << "MALL2 dupa metoda adauga:" << endl << endl;
cout << "-----------operatorul >> de citire de la tastatura------------" << endl << endl;
//cin >> mall1;
cout << "MALL 2 inainte de op -=" << endl << mall2 << endl << endl;
mall2 -= 1;
cout << "MALL 2 dupa op -=" << endl << mall2 << endl << endl;
}