Documente Academic
Documente Profesional
Documente Cultură
h"
#include <iostream>
#include<string>
#include<fstream>
#include<vector>
using namespace std;
//ex 7 -polimorfism
class Interfata {
public :
virtual void afisareVirtuala() = 0;
};
//ex 6
string getNumeBun() {
string numeValid;
cout << "Da un nume cu o lungime mai mare decat 3: ";
cin >> numeValid;
while (numeValid.length() <= 3) {
cout << "Da un nume cu o lungime mai mare decat 3: ";
cin >> numeValid;
}
return numeValid;
}
};
class Sala : public Interfata{
protected:
//ex 1
//ex 2
Sala() :id(nrSali++) {
nrLocuri = 0;
piesa = "n/a";
pretBilet = 0;
ocupate = NULL;
}
Sala(int nrL, bool* ocup, string p, float pret) :id(nrSali++) {
nrLocuri = nrL;
ocupate = new bool[nrL];
for (int i = 0; i < nrL; i++) {
ocupate[i] = ocup[i];
}
piesa = p;
pretBilet = pret;
}
Sala(const Sala& sursa) :id(nrLocuri++) {
nrLocuri = sursa.nrLocuri;
ocupate = new bool[sursa.nrLocuri];
for (int i = 0; i < sursa.nrLocuri; i++) {
ocupate[i] = sursa.ocupate[i];
}
piesa = sursa.piesa;
pretBilet = sursa.pretBilet;
}
~Sala() {
if (ocupate) {
delete[] ocupate;
}
}
//ex3
int nrLocOcupate() {
int k = 0;
for (int i = 0; i < nrLocuri; i++) {
if (ocupate[i] == 1) {
k++;
}
}
return k;
}
float VenitTotal() {
int k = 0;
for (int i = 0; i < nrLocuri; i++) {
if (ocupate[i] == 1) {
k++;
}
}
return k * pretBilet;
}
float ProcentOcupare() {
return (getNrLocuri() / (float)nrLocuri) * 100;
}
//ex 4
//ex 5
//ex 7
void afisareVirtuala() {
cout << "Se afiseaza clasa Sala" << endl;
}
};
int Sala::nrSali = 0;
//ex 7
}
}
SalaCinema& operator=(const SalaCinema& sursa) {
Sala::operator=(sursa);
if (durate) {
delete[] durate;
}
nrFilmeInDerulare = sursa.nrFilmeInDerulare;
durate = new int[nrFilmeInDerulare];
for (int i = 0; i < nrFilmeInDerulare; i++) {
durate[i] = sursa.durate[i];
}
return *this;
}
void adaugaFilmDurata(int durNoua) {
int* vn = new int[nrFilmeInDerulare + 1];
for (int i = 0; i < nrLocuri; i++) {
vn[i] = durate[i];
}
vn[nrFilmeInDerulare] = durNoua;
nrFilmeInDerulare++;
}
friend ostream& operator<<(ostream& out, SalaCinema& sursa) {
out << "Numarul de filme: " << sursa.nrFilmeInDerulare<<endl;
for (int i = 0; i < sursa.nrFilmeInDerulare; i++) {
out << sursa.durate[i] << " ";
}
out << "Nume: " << sursa.piesa << endl;
out << "Nr de locuri: " << sursa.nrLocuri << endl;
out << "Pret bilet: " << sursa.pretBilet << endl;
out << "Locurile sunt: ";
for (int i = 0; i < sursa.nrLocuri; i++) {
out << sursa.ocupate[i] << " ";
}
out << endl;
return out;
}
void afisareVirtuala() {
cout << "Se afiseaza clasa Sala cinema" << endl;
}
};
class Container {
vector<Sala> vectSali;
public:
//Apeluri ex 3
//cout << s.getNrSali();
/*s2.setPiesa("O noapte furtunoasa"); cout << s2.getPiesa() << endl;
s2.setPret(35.5); cout << s2.getPretBilet() << endl;
s2.setLocuri(3, new bool[3]{ 1,1,1 });
for (int i = 0; i < s2.getNrLocuri(); i++) {
cout << s2.getOcupate()[i] << " ";
}
cout << endl;
cout << s2.nrLocOcupate() << endl;
cout << s2.VenitTotal() << endl;
cout << s2.ProcentOcupare() << endl;*/
//Apeluri ex 4
/*s = s2;
cout << s;
if (s == s2) {
cout << "Piesele au acelasi pret" << endl;
}
else {
cout << "Preturi diferite!" << endl;
}
s2++;*/ //adauga 5 lei la pretul biletului
//Apeluri ex 5
/*ofstream fout;
string numeFisier = "fisier.txt";
Sala vectSala[3] = { s1,s2,s };
fout.open(numeFisier, ios::out);
if (fout.is_open()) {
for (int i = 0; i < 3; i++) {
if (vectSala[i].nrLocOcupate() > 0) {
fout << vectSala[i];
}
}
}
fout.close();*/
//Apeluri ex 6
//nu intra pe exceptie
//try {
// s2.setPiesa("n");
//}
//catch (Exceptie* e) {
// s2.setPiesa(e->getNumeBun());
//}
//try {
// s1.setPret(0);
//}
//catch (Exceptie e) {
// s1.setPret(e.getPretBun());
//}
//Apeluri ex 7
SalaCinema sc;
//cout << sc;
//sc.afisareVirtuala();
//s1.afisareVirtuala();