Sunteți pe pagina 1din 4

#include<iostream>

using namespace std;


class CardFidelitate{
private:
//atributele
int puncteDisponibile;
char* posesor;
int nrLuni;
float* punctePeLuna;
const int codCard;
public:
//nota 5
//constructor implicit
CardFidelitate(): codCard(0)
{
this->puncteDisponibile = 0;
this->posesor = NULL;
this->nrLuni = 0;
this->punctePeLuna = NULL;
}
//constructor cu parametrii
CardFidelitate(int puncteDisponibile,char* posesor,int nrLuni,float* punctePeLuna,int
codCardNou): codCard(codCardNou)
{
this->puncteDisponibile = puncteDisponibile;
this->posesor = new char[strlen(posesor)+1];
strcpy(this->posesor,posesor);
this->nrLuni = nrLuni;
this->punctePeLuna = new float[nrLuni];
for(int i=0;i<nrLuni;i++)
this->punctePeLuna[i] = punctePeLuna[i];
}
char* getPosesor() {return this->posesor;}
int getCodCard() {return codCard;}
char* setPosesor(char* posesor) //nu cred ca e nevoie de setter dar e tot metoda de
acces , in schimb pentru codCard , nu se poate modifica deoarece e constant
{
if(this->posesor != NULL)
delete[] this->posesor;
this->posesor = new char[strlen(posesor)+1];
strcpy(this->posesor,posesor);
}
//nota 6
~CardFidelitate()
{
if(this->posesor != NULL)
delete[] this->posesor;
if(this->punctePeLuna != NULL)
delete[] this->punctePeLuna;
}
//constructor de copiere
CardFidelitate(const CardFidelitate& c): codCard(c.codCard)
{
this->puncteDisponibile = c.puncteDisponibile;
this->posesor = new char[strlen(c.posesor)+1];
strcpy(this->posesor,c.posesor);
this->nrLuni = c.nrLuni;

this->punctePeLuna = new float[c.nrLuni];


for(int i=0;i<c.nrLuni;i++)
this->punctePeLuna[i] = c.punctePeLuna[i];
}
//supraincarcare operator=
CardFidelitate operator=(const CardFidelitate& c)
{
if(this->posesor != NULL)
delete[] posesor;
if(this->puncteDisponibile != NULL)
delete[] punctePeLuna;
this->puncteDisponibile = c.puncteDisponibile;
this->posesor = new char[strlen(c.posesor)+1];
strcpy(this->posesor,c.posesor);
this->nrLuni = c.nrLuni;
this->punctePeLuna = new float[c.nrLuni];
for(int i=0;i<c.nrLuni;i++)
this->punctePeLuna[i] = c.punctePeLuna[i];
return *this;
}
//nota 7
float TotalPuncteVechime()
{
float total=0;
for(int i=0;i<this->nrLuni;i++)
total += this->punctePeLuna[i];
return total;
}
friend ostream& operator<<(ostream& out,CardFidelitate c);
//nota 8
CardFidelitate operator-=(int a)
{
this->puncteDisponibile -= a;
return *this;
}
////sau pentru acelasi operator daca nu vrem sa il folosim in cascada
//void operator-=(int a)
//{
//
this->puncteDisponibile -= a;
//}
//nota 9
operator int() {return this->puncteDisponibile;}
friend istream& operator>>(istream& in,CardFidelitate& c); //modificam continutul lui c
deci folosim &
CardFidelitate operator+=(float x)
{
if(this->punctePeLuna != NULL)
{
float* v = new float[this->nrLuni + 1];
for(int i=0;i<this->nrLuni;i++)
v[i] = this->punctePeLuna[i];
v[nrLuni] = x;

this->nrLuni += 1;
delete[] this->punctePeLuna;
this->punctePeLuna = new float[nrLuni];
for(int i=0;i<nrLuni;i++)
punctePeLuna[i] = v[i];
}
return *this;
}
};
ostream& operator<<(ostream& out,CardFidelitate c)
{
out<<"Puncte disponibile: "<<c.puncteDisponibile<<endl;
out<<"Posesor: "<<c.posesor<<endl;
out<<"Numar de luni: "<<c.nrLuni<<endl;
out<<"Puncte pe luna: "<<endl;
for(int i=0;i<c.nrLuni;i++)
cout<<"Luna "<<i+1<<": "<<c.punctePeLuna[i]<<endl;
out<<"Cod card: "<<c.codCard;
return out;
}
istream& operator>>(istream& in,CardFidelitate& c)
{
cout<<"Puncte disponibile: ";
in>>c.puncteDisponibile;
char aux[50];
cout<<"Nume posesor: ";
in>>aux;
if(c.posesor != NULL)
delete[] c.posesor;
c.posesor = new char[strlen(aux)+1];
strcpy(c.posesor,aux);
cout<<"Numar luni: ";
in>>c.nrLuni;
if(c.punctePeLuna != NULL)
delete[] c.punctePeLuna;
c.punctePeLuna = new float[c.nrLuni];
cout<<"Puncte pe luna"<<endl;
for(int i=0;i<c.nrLuni;i++)
{
cout<<"Puncte pe luna "<<i+1<<": ";
in>>c.punctePeLuna[i];
}
return in;
}
void main()
{
float v[] = {10,20,30,40,50};
CardFidelitate c(100,"Andrew",5,v,10); //constr cu parametrii
CardFidelitate c1 = c; //constructor de copiere
CardFidelitate c2; //constructor implicit
c2 = c1; //operator egal
/*CardFidelitate c3;
cin>>c3;
cout<<c3;*/
cout<<c2.TotalPuncteVechime()<<endl;

c2 += 10; //operator +=
cout<<c2;
//nu am testat toate posibilitatile, daca apare orice eroare postati va rog
}

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