Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 6

#include<iostream>

using namespace std;

class Restaurant {

const int id;


static int nrRestaurante;
char* nume;
int nrMeniuri;//nr de menuri
int* preturi;//pretul menurilor

public:

//cosnt fara parametrii


Restaurant() :id(nrRestaurante++) {

this->nume = new char[strlen("na") + 1];


strcpy(this->nume, "na");
this->nrMeniuri = 0;
this->preturi = NULL;
}

//cosnt cu parametrii toti parametrii


Restaurant(const char* nu, int nr, int* pre) :id(nrRestaurante++)
{

this->nume = new char[strlen(nu) + 1];


strcpy(this->nume, nu);

this->nrMeniuri = nr;
this->preturi = new int[nr];

for (int i = 0; i < nr; i++) {


this->preturi[i] = pre[i];
}
}
//cosnt cu un param
Restaurant(const char* nu) :id(nrRestaurante++)
{

this->nume = new char[strlen(nu) + 1];


strcpy(this->nume, nu);
this->nrMeniuri = 0;
this->preturi = NULL;

// copeire const
Restaurant(const Restaurant& sursa) :id(nrRestaurante++)
{

this->nume = new char[strlen(sursa.nume) + 1];


strcpy(this->nume, sursa.nume);
this->nrMeniuri = sursa.nrMeniuri;
this->preturi = new int[sursa.nrMeniuri];

for (int i = 0; i < sursa.nrMeniuri; i++) {


this->preturi[i] = sursa.preturi[i];
}
}

//set fuct accesor


void setNume(const char* numeNou) {
if (strlen(numeNou) > 2) {
if (this->nume) {
delete[] this->nume;
}
this->nume = new char[strlen(numeNou) + 1];
strcpy(this->nume, numeNou);

}
//op =
Restaurant& operator=(const Restaurant& sursa)
{
if (preturi) {
delete[] preturi;
}
if (nume) {
delete[] nume;
}

this->nume = new char[strlen(sursa.nume) + 1];


strcpy(this->nume, sursa.nume);

this->nrMeniuri = sursa.nrMeniuri;
this->preturi = new int[sursa.nrMeniuri];

for (int i = 0; i < sursa.nrMeniuri; i++) {


this->preturi[i] = sursa.preturi[i];
}
return*this;
}

//seter pentru vector dinamic


void setMeniuri(int nr, int* pre) {
if (nr > 0 && pre != NULL) {
this->nrMeniuri = nr;
if (this->preturi) {
delete[] this->preturi;
}

this->preturi = new int[nr];


for (int i = 0; i < nr; i++) {
this->preturi[i] = pre[i];
}
}

//geteri fct accesor


char* getNume() {
return this->nume;
}

int* getPreturi() {
return this->preturi;
}
int getNrMeniuri() {
return this->nrMeniuri;
}

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

static int nrREst() {


return nrRestaurante;
}

static void setNrREstaurante(int x) {


if (x >= 0) {
nrRestaurante = x;
}
}

//destructor
~Restaurant() {
if (preturi) {
delete[] preturi;
}
if (nume) {
delete[] nume;
}
nrRestaurante--;
}

//afisare
friend ostream& operator << (ostream & o, Restaurant sursa) {

o << "Nume: " << sursa.nume << endl;


o << "nr meniuri " << sursa.nrMeniuri << endl;

for (int i = 0; i < sursa.nrMeniuri; i++) {


o << "meniu " << i + 1 << " costa " << sursa.preturi[i] << "
lei" << endl;
}
o << endl;

return o;
}

//citirea unui ob
friend istream& operator>>(istream& in, Restaurant& sursa) {

cout << "da nrmenuri ";


in >> sursa.nrMeniuri;

if (sursa.preturi) {
delete[] sursa.preturi;
}
sursa.preturi = new int[sursa.nrMeniuri];
for (int i = 0; i < sursa.nrMeniuri; i++) {
cout << "da pret pt meniu " << i + 1 << ": ";
in >> sursa.preturi[i];
}

cout << "Introdu numele : ";


char t[50];
in >> t;
if (sursa.nume) {
delete[] sursa.nume;
}
sursa.nume = new char[strlen(t) + 1];
strcpy(sursa.nume, t);

return in;
}

//maresc preturile la fiecare meniu in mod implicit cu 10 lei


Restaurant & operator++() {
for (int i = 0; i < nrMeniuri; i++) {
preturi[i] += 10;
}
return *this;
}

int operator[](int ind) {


if (ind >= 0 && ind < nrMeniuri) {
return preturi[ind];
}
else {
throw new exception("index gresit");
}
}

void operator+=(int meniuNou) {


int * v = new int[nrMeniuri + 1];
for (int i = 0; i < nrMeniuri; i++) {
v[i] = preturi[i];
}
v[nrMeniuri]=meniuNou;
nrMeniuri++;
if (preturi) {
delete[] preturi;
}
preturi = v;

explicit operator int() {


return nrMeniuri;
}

float operator()() {
float m = 0;
for (int i = 0; i < nrMeniuri; i++) {
m += preturi[i];
}
return m;
}
bool operator==(Restaurant r) {
return r.nrMeniuri == nrMeniuri;
}
};

int Restaurant::nrRestaurante = 0;

void main() {

Restaurant r;
Restaurant r1("terasa", 3, new int[3]{ 6,12,43 });
Restaurant r2("Terasa nova");
Restaurant r3(r2);
r = r1;
cin >> r1;
cout << r1;
r1.setMeniuri(4, new int[4]{ 4, 6,12,43 });
r1.setNume("terasa nova mare");
cout << r.getID() << endl;
cout << r1.getNrMeniuri() << endl;
cout << r1.getNume() << endl;
cout << r1.getPreturi()[0] << endl;
++r1;
r+=1;
cout << (int)r1;
//cout << r1;
cout << (r1 == r2) << endl;
cout << r1[0] << endl;
}

You might also like