Sunteți pe pagina 1din 4

#include<iostream>

#include<string>
using namespace std;

class Magazin
{private:
const int cui;
string adresa;
int nrProduse;
float* preturi;
public:
static int nrMagazine;
Magazin(int cui) :cui(100+nrMagazine++)
{
this->adresa = "Anonim";
this->nrProduse = 0;
this->preturi = NULL;
}

Magazin(int cui, string adresa, int nrProduse, float* preturi) :cui(cui)


{
this->adresa = adresa;
this->nrProduse = nrProduse;
this->preturi = new float[nrProduse];
for (int i = 0; i < nrProduse; i++) {
this->preturi[i] = preturi[i];
}
}

Magazin(Magazin&m) :cui(100 + nrMagazine++)


{
this->adresa = m.adresa;
this->nrProduse = m.nrProduse;
this->preturi = new float[m.nrProduse];
for (int i = 0; i < m.nrProduse; i++) {
this->preturi[i] = m.preturi[i];
}
}

Magazin &operator =(Magazin &m) {


delete[]preturi;
this->adresa = m.adresa;
this->nrProduse = m.nrProduse;
this->preturi = new float[m.nrProduse];
for (int i = 0; i < m.nrProduse; i++) {
this->preturi[i] = m.preturi[i];
}
return *this;
}

string getAdresa()
{
return this->adresa;
}

int getNrProduse()
{
return this->nrProduse;
}

~Magazin()
{
delete[]preturi;
}

int getCui()
{
return this->cui;
}

void setPreturi(float* vector, int nr)


{
this->nrProduse = nr;
this->preturi = new float[nr];
for (int i = 0; i < nr; i++) {
this->preturi[i] = vector[i];
}
}

float* getPreturi()
{
return this->preturi;
}

float calculeazaPretulMediu()
{

float suma=0;
for (int i = 0; i < this->nrProduse; i++)
{
suma += preturi[i];
}
return suma/ this->nrProduse;
}

friend int getNrMagazine()


{
return nrMagazine;
}

friend ostream&operator<<(ostream&out, Magazin&m)


{
out << "Magazinul cui: " << m.cui << ", adresa: " << m.adresa << "
preturi: ";
for (int i = 0; i < m.nrProduse; i++)
{
out << m.preturi[i] << ", ";
}
return out;
}

float& operator [](int index)

{
return preturi[index];
}
Magazin&operator+=(float valoare)
{
float* vectorNou = new float[nrProduse];
for (int i = 0; i < nrProduse; i++)
{
vectorNou[i] = this->preturi[i];
}
this->nrProduse++;
this->preturi = new float[nrProduse];

for (int i = 0; i < nrProduse - 1; i++)


{
this->preturi[i] = vectorNou[i];
}
this->preturi[nrProduse - 1] = valoare;
delete[] vectorNou;
return *this;
}

bool operator !()


{
if (this->nrProduse > 0) return true;
else return false;
}
bool operator< (Magazin&m)
{
if (this->calculeazaPretulMediu() < m.calculeazaPretulMediu())
return true;
else return false;
}

};
int Magazin::nrMagazine = 0;

void main()
{
//nota 3
cout << "\nCERINTE NOTA 3 ---------------------------" << endl;
Magazin m1(101);
cout << m1.getAdresa() << endl;//afiseaza Anonim
float preturi[]{ 12.2,14.5,5.99,6.55,20.0 };
Magazin m2(102, "Str. Popesti Leordeni, nr5", 5, preturi);
cout << m2.getNrProduse() << endl;//afiseaza 5

//nota 4
cout << "\nCERINTE NOTA 4 ---------------------------" << endl;
Magazin m3 = m2;
cout << m2;
cout << m3.getCui() << endl;//afis 102

//nota 5
cout << "\nCERINTE NOTA 5 ---------------------------" << endl;
float preturi_noi[]{ 10.65,8.6,12.0 };
m3.setPreturi(preturi_noi, 3);
cout << m3.getPreturi()[1];//afis 8.6

//nota 6
cout << "\nCERINTE NOTA 6 ---------------------------" << endl;
Magazin m4(104);
m1 = m4 = m3;
//cout << Magazin::getNrMagazine() << endl;//afis. 4
float pretMediu = m1.calculeazaPretulMediu();
cout <<endl<< pretMediu << endl;

//nota 7
cout << "\nCERINTE NOTA 7 ---------------------------" << endl;
cout << m3;
Magazin* pm = new Magazin(103);
*pm = m2;
cout << *pm;

//nota 8
cout << "\nCERINTE NOTA 8 ---------------------------" << endl;
delete pm;
m2[2] = 10; //modifica pretul celui de al doilea produs
cout << m2[2];

//nota 9
cout << "\nCERINTE NOTA 9 ---------------------------" << endl;
m2 += 12;//adauga un nou produs cu pretul specificat
cout << endl << endl<< m2;
//nota 10
cout << "\nCERINTE NOTA 10 ---------------------------" << endl;
cout << "\n magazinul m1 are produse disponibile?" << !m1;

if (m2 < m3)


cout << "\n m2 are un pret mediu mai mic decat m3";
else
cout << "\n m3 are unpret mediu mai mic decat m2";

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