Sie sind auf Seite 1von 26

#include<iostream>

#include<fstream>
#include<list>

#pragma warning (disable:


4996)

using namespace std;

int COD_EROARE_PRET =
1000;

class Cinema {

protected:

char* titlu;
char actori[20];
int pret;

int* bileteVandute;
int nrBilete;

const int id;


static int nrSali;//
static=atribut la nivel de
cls,nu de obiect

public:
//Cinema() :id(0) daca nu
am static
//{
// this->titlu = NULL;
// strcpy(this->actori,
"Actor1");
// this->pret;
// this->bileteVandute
= NULL;
// this->nrBilete = 0;
//}

//Cinema(int id) :id(id)


//{
// this->titlu = NULL;
// strcpy(this->actori,
"Actor1");
// this->pret;
// this->bileteVandute
= NULL;
// this->nrBilete = 0;
//}

Cinema():id(nrSali++)
{
this->titlu = new
char[strlen("titlu")+1];
strcpy(this->titlu,
"titlu");
strcpy(this->actori,
"Actor1");
this->pret=10;
this->bileteVandute
= NULL;
this->nrBilete = 0;
}

Cinema(const char* titlu,


const char actori[20], int
pret, int* bileteVandute, int
nrBilete) :id(nrSali++)
{
this->titlu = new
char[strlen(titlu) + 1];
strcpy(this->titlu,
titlu);
strcpy(this->actori,
actori);
this->pret = pret;
this->nrBilete =
nrBilete;
this->bileteVandute
= new int[nrBilete];
for (int i = 0; i <
nrBilete; i++)
this-
>bileteVandute[i] =
bileteVandute[i];
}

~Cinema()
{
if (titlu != NULL)
delete[] this-
>titlu;
if (bileteVandute !=
NULL)
delete[] this-
>bileteVandute;
nrBilete--;
}

Cinema(const Cinema&
c):id(nrBilete++)
{
this->titlu = new
char[strlen(c.titlu) + 1];
strcpy(this->titlu,
c.titlu);
strcpy(this->actori,
c.actori);
this->pret = c.pret;
this->nrBilete =
c.nrBilete;
this->bileteVandute
= new int[c.nrBilete];
for (int i = 0; i <
c.nrBilete; i++)
this-
>bileteVandute[i] =
c.bileteVandute[i];
}

Cinema&
operator=(const Cinema& c)
{
if (titlu != NULL)
delete[] this-
>titlu;
this->titlu = new
char[strlen(c.titlu) + 1];
strcpy(this->titlu,
c.titlu);

strcpy(this->actori,
c.actori);
this->pret = c.pret;
this->nrBilete =
c.nrBilete;

if (bileteVandute !=
NULL)
delete[] this-
>bileteVandute;
this->bileteVandute
= new int[c.nrBilete];
for (int i = 0; i <
c.nrBilete; i++)
this-
>bileteVandute[i] =
c.bileteVandute[i];

return *this;
}

void setPret(int pret)


{
if (pret > 40)
{
throw
COD_EROARE_PRET;
}
else
{
this->pret = pret;
}
}

int getPret()
{
return this->pret;
}

//set get ptr char si const


si static

void setActori(const char


actori[])
{
if (strlen(actori) > 20)
{
throw new
exception("lungime
neacceptata");
}
else
{
strcpy(this-
>actori, actori);
}
}

char* getActori()
{
return this->actori;
}

int getId()
{
return this->id;
}

static int getNrSali()


{
return nrSali;
}
int* getBileteVandute()
{
return this-
>bileteVandute;
}

void
setBileteVandute(int*
bileteVandute, int nrBilete)
{
if (this-
>bileteVandute != NULL)
delete[] this-
>bileteVandute;
this->nrBilete =
nrBilete; //!
this->bileteVandute
= new int[nrBilete];
for (int i = 0; i <
nrBilete; i++)
this-
>bileteVandute[i] =
bileteVandute[i];
}

//metode

int minimBileteVandute()
{
int minim;
minim =
bileteVandute[0];
for(int
i=0;i<nrBilete;i++)
if
(bileteVandute[i] < minim)
{
minim =
bileteVandute[i];
}
return minim;
}

//supraincarcare

explicit operator int()


{
return this->pret;
}

friend ostream&
operator<<(ostream& iesire,
Cinema& c)
{
iesire << c.titlu;
iesire << c.actori;
iesire << c.pret;
iesire << c.nrBilete;
for (int i = 0; i <
c.nrBilete; i++)
iesire << c.actori;
return iesire;
}

Cinema operator+(int
cresterePret) {

Cinema copie = *this;


copie.pret =
cresterePret + copie.pret;
return copie;
}

friend istream&
operator>>(istream& intrare,
Cinema& c)
{

intrare >> c.actori;


intrare >> c.pret;

if (c.titlu != NULL)
delete[] c.titlu;

char buffer[20];
intrare >> buffer;//!
c.titlu = new
char[strlen(buffer) + 1];
strcpy(c.titlu, buffer);

//am uitat
dezalocarea
if (c.bileteVandute !=
NULL)
delete[]
c.bileteVandute;

intrare >> c.nrBilete;

c.bileteVandute =
new int[c.nrBilete];
for (int i = 0; i <
c.nrBilete; i++)
intrare >>
c.bileteVandute[i]; //bilete
vandute[i sau fara i?

return intrare;

int& operator[](int index)


{
return this-
>bileteVandute[index];
}

bool operator>(Cinema
c) //< ;<=,>=,!=,==
{
if (this->pret>c.pret)
{
return true;
}
else
{
return false;
}
}

bool operator!()
{
if (this->pret == 0)
{
return true;
}
else
{
return false;
}
}
Cinema operator++ (int)
{
Cinema copie = *this;
this->pret++;
return copie;
}
//Cinema operator++()
//{
// this->pret++; //
this=>pret=this->pret+x;
// return*this;
//}

Cinema operator++()
{
int* bileteVanduteNoi
= new int[nrBilete+1];

if (bileteVandute !=
NULL)
delete[]
bileteVandute;

for (int i = 0; i <


nrBilete;i++)

bileteVanduteNoi[i]=bileteVa
ndute[i];
bileteVanduteNoi[nrBilete] =
10; //adaug un bil cu pret 10
bileteVandute=
bileteVanduteNoi;
nrBilete++;
return *this;

//operator+=
Cinema operator+=(int x)
{
this->pret = this-
>pret + x;
return *this;
}

// fisier scriere
friend ofstream&
operator<<(ofstream&
scriere, Cinema& c)
{
scriere << c.titlu;
scriere << c.actori;
scriere << c.pret;
scriere << c.nrBilete;
for (int i = 0; i <
c.nrBilete; i++)
scriere <<
c.actori;
return scriere;
}

virtual int calculPret()


{ //schimb private-
>protected
return pret;
}

}; int Cinema::nrSali = 0;

class Cinema3d:public
Cinema
{
private:
int pretOchelari;
public:
Cinema3d() :Cinema()
{
this->pretOchelari =
12;
}
Cinema3d(int
pretOchelari, const char*
titlu, const char actori[20],
int pret, int* bileteVandute,
int nrBilete) :Cinema(titlu,
actori, pret, bileteVandute,
nrBilete)
{
this -> pretOchelari =
pretOchelari;

int calculPret()
{

return pret +
pretOchelari;
}
};
class Mall
{
private:
Cinema* cinema;
int nrCinema;

public:
Mall()
{
this->cinema =
NULL;
this->nrCinema = 0;
}
Mall(Cinema* cinema, int
nrCinema)
{
this->nrCinema =
nrCinema;
this->cinema = new
Cinema[nrCinema];
for (int i = 0; i <
nrCinema; i++)
this->cinema[i] =
cinema[i];
}
~Mall()
{
if (cinema != NULL)
delete[] this-
>cinema;
}
Mall(const Mall&m)
{
this->nrCinema =
m.nrCinema;
this->cinema = new
Cinema[m.nrCinema];
for (int i = 0; i <
m.nrCinema; i++)
this->cinema[i] =
m.cinema[i];
}
Mall operator=(const
Mall&m)
{
this->nrCinema =
m.nrCinema;
if (cinema != NULL)
delete[] this-
>cinema;
this->cinema = new
Cinema[m.nrCinema];
for (int i = 0; i <
m.nrCinema; i++)
this->cinema[i] =
m.cinema[i];
return *this;
}

void adaugCinema(Cinema
x)
{

Cinema* cinemaNou =
new Cinema[nrCinema+1];

for (int i = 0; i <


nrCinema; i++)
cinemaNou[i] =
cinema[i];

if (cinema != NULL)
delete[]cinema;
cinemaNou[nrCinema] = x;
cinema =
cinemaNou;
nrCinema++;

}
};

class MallMare
{
private:
list<Cinema>
listaCinema;
public:
MallMare(list<Cinema>
listaCinema)
{
this->listaCinema =
listaCinema;
}
MallMare(const
MallMare& m)
{
this->listaCinema =
m.listaCinema;
}
MallMare&
operator=(const MallMare&
m)
{
this->listaCinema =
m.listaCinema;
return *this;
}
void
adaugCinema(Cinema& c) //
adaun cinema in lista
{

listaCinema.push_back(c);
}
};
void main()
{
Cinema c1;

int bileteVandute[3] =
{ 1,2,3 };

/*int bileteVandute[3];
bileteVandute[0] = 1;
bileteVandute[1] = 2;
bileteVandute[2] = 3;*/

Cinema c2( "Titanic",


"DiCaprio", 10,bileteVandute,
3);

//constructor copiere

Cinema c3 = c2;

c3 = c1;

c2.setPret(20);//de ce nu
apare mesajul ?

cout << c2.getPret();

c3.setActori("Abfd");

cout << c3.getActori();

//apelare metoda minim


int pretMinim;
pretMinim =
c2.minimBileteVandute();
cout << pretMinim;

//supraincarcare pre
c1 = ++c2;

cout<<
c2.minimBileteVandute(); //
afisare
//apel CAST
cout << (int)c2;

//apel OP RELATIONALI
>
if (c1 > c2)
{
cout << "pret c1>pret
c2";
}
else
{
cout << "pret
c2>pret c1";
}

//apelare operator+
c1 = c2 + 2;
cout << c1;

//apel index
c2[2] = 1;
cout << c2[2];

try
{
c2.setPret(-20);
}
catch(int e) ////int e!!
{
cout << "nu se
poate";
}

Mall m1; // ! fara ()

Cinema cinema[3] =
{ c1,c2,c3 }; //obiecte care
exista
Mall m2(cinema, 3);

Mall m3 = m2;

m1 = m3;

m1.adaugCinema(c2);

//int* bileteVandute =
c2.getBileteVandute();
//int nrBilete=c2.//get set
ptr nr bilete->for ptr afisare

int bileteNoi[2] = { 2,3 };

c2.setBileteVandute(bileteN
oi, 2); //apel set int*

cout <<
Cinema::getNrSali(); //

list<Cinema>
listaCinema;

listaCinema.push_back(c1);

listaCinema.push_back(c2);

for
(list<Cinema>::iterator it =
listaCinema.begin(); it !=
listaCinema.end(); it++)
cout << *it;

Cinema3d cd1;

Cinema3d cd2 = cd1;

cd1 = cd2;

Cinema* cinemap[2] =
{ &c1,&cd2 };
for (int i = 0; i < 2; i++)
cout << cinemap[i]-
>calculPret(); //cinema[i]
pointer m nevoie de ->nu .
cout<<cd1.calculPret();

MallMare
mm1(listaCinema);
mm1.adaugCinema(c1);

char FisierNou[20];
cin >> FisierNou;

ofstream Fisier;
Fisier.open(FisierNou,
ios::out);

Fisier << c1;


Fisier << c2;
Fisier << c3;

Fisier.close();

ofstream FisierBinar;

FisierBinar.open("fisier.dat",
ios::binary | ios::out);

FisierBinar << c1;

FisierBinar.close();
}

//string - sir caractere ca un


int
//string* -vector alocat
dinamic de siruri de
carcatrere ca un int *
//int
//string * nume
//this->nume = new
string[nrnume]
//for (int i = 0; i <= nrnume;
i++)
//this->nume[i] = nume[i];
//

Das könnte Ihnen auch gefallen