Sunteți pe pagina 1din 5

#include<iostream>

using namespace std;

class Avocat {
const int codAvocat;
char* nume;
int onorariu;
int nrProcese;
int* vectorProcese;

public:
//CONSTRUCTOR FARA PAMATERI
Avocat() :codAvocat(0) {
this->nume = new char[strlen("na") + 1];
this->onorariu = 0;
this->nrProcese = 0;
this->vectorProcese = NULL;
}
//CONSTRUCTIR CU TOTI PARAMETRI
Avocat(const int codAvocat, const char* numeA, int onorariuA, int nrProceseA,
int* vectorProceseA) :codAvocat(codAvocat) {
this->nume = new char[strlen(numeA) + 1];
strcpy(this->nume, numeA);
this->onorariu = onorariuA;
this->nrProcese = nrProceseA;
this->vectorProcese = new int[nrProceseA];
for (int i = 0; i < nrProceseA; i++) {
this->vectorProcese[i] = vectorProceseA[i];
}
}
//CONSTRUCTOR CU 1 PARAMETRU
Avocat(const char* numeA) :codAvocat(0) {
this->nume = new char[strlen(numeA) + 1];
strcpy(this->nume, numeA);
this->onorariu = 0;
this->nrProcese = 0;
this->vectorProcese = NULL;
}
//CONSTRUCTOR DE COPIERE
Avocat(const Avocat& sursa) : codAvocat(sursa.codAvocat) {
this->nume = new char[strlen(sursa.nume) + 1];
strcpy(this->nume, sursa.nume);
this->onorariu = sursa.onorariu;
this->nrProcese = sursa.nrProcese;
this->vectorProcese = new int[sursa.nrProcese];
for (int i = 0; i < sursa.nrProcese; i++) {
this->vectorProcese[i] = sursa.vectorProcese[i];
}
}
//OPERATOR =
Avocat& operator=(const Avocat& sursa) {
if (vectorProcese) {
delete[] vectorProcese;
}
if (nume) {
delete[]nume;
}
this->nume = new char[strlen(sursa.nume) + 1];
strcpy(this->nume, sursa.nume);
this->onorariu = sursa.onorariu;
this->nrProcese = sursa.nrProcese;
this->vectorProcese = new int[sursa.nrProcese];
for (int i = 0; i < sursa.nrProcese; i++) {
this->vectorProcese[i] = sursa.vectorProcese[i];
}
return *this;
}
//DESTRUCTOR
~Avocat() {
if (vectorProcese) {
delete[] vectorProcese;
}
if (nume) {
delete[]nume;
}
}
//INTRARE SI IESIRE

friend ostream& operator<<(ostream& o, Avocat sursa) {


o << "COD:" << sursa.codAvocat << endl;
o << "Nume:" << sursa.nume << endl;
o << "Onorariu:" << sursa.onorariu << endl;
o << "Nr Procese:" << sursa.nrProcese << endl;

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


o << "Suma aferenta procesului " << i + 1 << " este " <<
sursa.vectorProcese[i] << " lei." << endl;

}
o << endl;
return o;
}

friend istream& operator>>(istream& in, Avocat& sursa) {

cout << "Nume:";


in >> sursa.nume;

cout << "Onorariu:";


in >> sursa.onorariu;

cout << "Nr procese:";


in >> sursa.nrProcese;

if (sursa.vectorProcese) {
delete[] sursa.vectorProcese;
}
sursa.vectorProcese = new int[sursa.nrProcese];
for (int i = 0; i < sursa.nrProcese; i++) {
cout << "Suma aferenta procesului " << i + 1 << ":";
in >> sursa.vectorProcese[i];
}

cout << "Nume : ";


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

return in;

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

void setVectorProcese(int nrProceseA, int* vectorProceseA) {


if (nrProceseA > 0 && vectorProceseA != NULL) {
this->nrProcese = nrProceseA;
if (this->vectorProcese) {
delete[]this->vectorProcese;
}
this->vectorProcese = new int[nrProceseA];
for (int i = 0; i < nrProceseA; i++) {
this->vectorProcese[i] = vectorProceseA[i];
}

}
}

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

int* getVectProcese() {
return this->vectorProcese;
}
int getNrProcese() {
return this->nrProcese;
}

int getCOD() {
return this->codAvocat;
}

//maresc preturile la fiecare tarif din vectorProcese in mod implicit cu 100


lei
Avocat& operator++() {
for (int i = 0; i < nrProcese; i++) {
vectorProcese[i] += 100;
}
return *this;
}
int operator[](int ind) {
if (ind >= 0 && ind < nrProcese) {
return vectorProcese[ind];
}
else {
throw new exception("index gresit");
}
}

void operator+=(int procesNou) {


int* v = new int[nrProcese + 1];
for (int i = 0; i < nrProcese; i++) {
v[i] = vectorProcese[i];
}
v[nrProcese] = procesNou;
nrProcese++;
if (vectorProcese) {
delete[] vectorProcese;
}
vectorProcese = v;

explicit operator int() {


return nrProcese;
}

float operator()() {
float m = 0;
for (int i = 0; i < nrProcese; i++) {
m += vectorProcese[i];
}
return m;
}
bool operator==(Avocat r) {
return r.nrProcese == nrProcese;
}

};

void main() {
Avocat a;

int vectorProces1[3] = { 500, 1000, 1500 };


int vectorProces2[3] = { 900, 700, 1200 };
int vectorProces3[3] = { 700,1300,2600 };
Avocat a1(101, "Avocat 1", 1500, 3, vectorProces1);

Avocat a2("Avocat 2");

Avocat a3(a2);
a = a1;
cout << a1;
cin >> a1;
a1.setNume("Alexandrescu");
a1.setVectorProcese(3, vectorProces3);
cout << a.getCOD() << endl;
cout << a1.getNrProcese() << endl;
cout << a1.getNume() << endl;
++a1;

a += 1;
cout << (int)a1;
cout << (a1 == a2) << endl;
//cout << a1[0] << endl;

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