Sunteți pe pagina 1din 7

#include <iostream>

using namespace std;


class Bicicleta
{
private:
char * model;
float pret;
int nr_pinioane;
float* diametru_pinioane; //vector
bool cu_roti_ajutatoare;
const int cod; //definirea unui atribut constant
static int nr_biciclete; //numara cate biciclete avem
public:
float operator+(float val)
{
float aux = this->pret + val;
return aux;
}
int operator+(int val)
{
int aux = this->pret + val;
return aux;
}
Bicicleta operator+(Bicicleta b)
{
Bicicleta aux = *this;
//luam toate elementele din this;se ap
eleaza constructorul de copiere
aux.pret = b.pret + this->pret;
return aux; //se returneaza ce se modifica
}
Bicicleta operator=(const Bicicleta& b)
{
if (this->model != NULL)
delete[]this->model;
this->model = new char[strlen(b.model) + 1];
strcpy(this->model, b.model);
this->pret = b.pret;
this->nr_pinioane = b.nr_pinioane;
if (this->diametru_pinioane != NULL)
delete[]this->diametru_pinioane;
this->diametru_pinioane = new float[this->nr_pinioane];
for (int i = 0;i < this->nr_pinioane;i++)
{
this->diametru_pinioane[i] = b.diametru_pinioane[i];
}
this->cu_roti_ajutatoare = b.cu_roti_ajutatoare;
return*this;
}
Bicicleta(const Bicicleta& b):cod(b.cod)
{
this->model = new char[strlen(b.model) + 1];
strcpy(model, this->model);

this->pret = b.pret;
this->nr_pinioane = b.nr_pinioane;
this->diametru_pinioane = new float[this->nr_pinioane];
for (int i = 0;i < this->nr_pinioane;i++)
{
this->diametru_pinioane[i] = b.diametru_pinioane[i];
}
this->cu_roti_ajutatoare = b.cu_roti_ajutatoare;
nr_biciclete++;
}
static int get_nr_biciclete() //nu folosesc this
{
return nr_biciclete;
}
Bicicleta() :cod(1) //constructor fara parametri ;declarare const
{
nr_biciclete++;
this->model = new char[strlen("Pegas") + 1];
strcpy(this->model, "Pegas");
this->pret = 120;
this->nr_pinioane = 4;
this->diametru_pinioane = new float[nr_pinioane];
for (int i = 0;i <= this->nr_pinioane;i++)
this->diametru_pinioane[i] = 5 + i;
this->cu_roti_ajutatoare = 1;
}
Bicicleta(int codNou, char* model, float pret, int nr_pinioane, float* d
iametru_pinioane, bool cu_roti_ajutatoare) :cod(codNou)
{
nr_biciclete++;
this->model = new char[strlen(model) + 1];
strcpy(this->model, model);
this->pret = pret;
this->nr_pinioane = nr_pinioane;
this->diametru_pinioane = new float[nr_pinioane];
for (int i = 0;i <= this->nr_pinioane;i++)
this->diametru_pinioane[i] = diametru_pinioane[i];
this->cu_roti_ajutatoare = cu_roti_ajutatoare;
}
Bicicleta(int codNou, char*model, float pret, int nr_pinioane, bool cu_r
oti_ajutatoare) :cod(codNou) //constructor cu 4 parametri
{
nr_biciclete++;
this->model = new char[strlen(model) + 1];
strcpy(this->model, model);
this->pret = pret;
this->nr_pinioane = nr_pinioane;
this->diametru_pinioane = new float[nr_pinioane];
for (int i = 0;i <= this->nr_pinioane;i++)
this->diametru_pinioane[i] = i + 1;
this->cu_roti_ajutatoare = cu_roti_ajutatoare;
}
void afisare_functie()
{

cout << this->model << " " << this->pret << " " << this->nr_pi
nioane << " " << this->cu_roti_ajutatoare << " ";
for (int i = 0;i<this->nr_pinioane - 1;i++)
cout << this->diametru_pinioane[i] << " ,";
cout << this->diametru_pinioane[this->nr_pinioane - 1] << ".";
}
void set_pret(float pret)
{
if (pret>0)
this->pret = pret; //atributul pret =parametru ;acces co
ntrolat ,in functie de ce vrem noi
}
void set_pret_exceptie(float pret)
{
if (pret > 0)
this->pret = pret; //atributul pret =parametru
else
throw "pretul e prea mic";
}
int set_pret_conditie(float pret) //cu conditie
{
if (pret > 0)
{
this->pret = pret; //atributul pret =parametru
return 1;
}
else
return 0;
}
float get_pret()
{
return this->pret;
}
void set_model(char* model)
{
if (model != NULL && strlen(model) > 0)
{
if (this->model != NULL)
delete[] this->model; ///aici evitam aparitia de
memory leak
this->model = new char[strlen(model) + 1];
strcpy(this->model, model);
}
}
char*get_model()
{
return this->model;
}

void set_roti(bool cu_roti_ajutatoare)


{
if (cu_roti_ajutatoare>0)
this->cu_roti_ajutatoare = cu_roti_ajutatoare;
}
bool get_roti()
{
return this->cu_roti_ajutatoare;
}
void set_pinioane(int nr, float* diametru)
{
if (nr > 0)
{
this->nr_pinioane = nr;
if (this->diametru_pinioane != NULL)
delete[] diametru_pinioane; ///aici evitam apari
tia de memory leak
this->diametru_pinioane = new float[nr];
for (int i = 0;i < nr;i++)
this->diametru_pinioane[i] = diametru[i];
}
}
float* get_diamentru_pinioane()
{
return this->diametru_pinioane;
}
float get_diametru_pozitie(int pozitie)
{
if (pozitie >= 0 && pozitie < this->nr_pinioane)
return this->diametru_pinioane[pozitie];
else
throw "pozitie incorecta";
}
int get_nr_pinioane()
{
return this->nr_pinioane;
}
~Bicicleta()
{
if (this->model != NULL)
delete[]this->model;
if (this->diametru_pinioane != NULL)
delete[]this->diametru_pinioane;
}
};
int Bicicleta::nr_biciclete = 0; //initializare
int operator+(int val, Bicicleta b) //la o fct in exteriorul clasei nu mai avem
this
{
int aux = val + b.get_pret();
return aux;
}

//Bicicleta ini
tializare(char* model, float pret, int nr, float*diametru_pinioane, bool cu_roti
)
//{
//
Biciclet
a b;
//
b.model
= new char[strlen(model) + 1];
//
strcpy(b
.model, model);
//
b.pret =
pret;
//
b.nr_pin
ioane = nr;
//
b.diamet
ru_pinioane = new float[nr];
//
for (int
i = 0;i<nr;i++)
//
b.diametru_pinioane[i] = diametru_pinioane[i];
//
b.cu_rot
i_ajutatoare = cu_roti;
//
return b
;
//}
void main()
{
Bicicleta b;
Bicicleta b1 = b; // sau Bicileta b1(b) ; Apelare constructor de copiere
Bicicleta b2(b);
Bicicleta b3;
b3 = b; //apelare operator= deoarece nu este momentul initializarii b3
a fost creat si apoi se modifica b3 este tipul returnat
b3 = b1 + b2; //intai se apeleaza constr de copiere(ca sa faca o copie a
lui b2 in stiva de memorie --operator +
int a = b1 + 6;
a = b1 + (float)6.6; //se mai scrie 6.6f
int c = 7 + b1;

//b1 + b2;//b1.operator+(b2)//->//operator+(b1,b2)

/*cout << Bicicleta::get_nr_biciclete() << endl;


Bicicleta b;

cout << b.get_model() << " " << b.get_pret() << endl;
b.set_pret(11);
cout << b.get_model() << " " << b.get_pret() << endl;
Bicicleta c(3, "Cube", 1000, 3, new float[3]{ 5,7,9 }, false);
cout << c.get_model() << " " << c.get_pret() << endl;
Bicicleta d(4, "Drag", 1300, 5, false);
cout << d.get_model() << " " << d.get_pret() << endl;
cout << d.get_nr_biciclete() << endl;
for (int i = 0;i < d.get_nr_pinioane();i++)
cout << d.get_diametru_pozitie(i) << " ";
*/

//Bicicleta b;
//if (b.set_pret_conditie(-1000) == 1)
//
cout << b.get_pret() << endl;
//else
//
cout << "pretul nu a fost setat"
//
<< endl;
b.set_model("Pegas");
//cout << b.get_model() << endl;
//b.set_roti(true);
//cout << b.get_roti() << endl;
//try
//{
//
//
//
//}
//catch
//{
//
//}

b.set_pret_exceptie(-5);
//cod de rulat
//se incaerca a fi rulat;
( char*exceptie

/*tip exceptie*/)

cout << "A fost captata o exceptie: " << exceptie << endl;

//cout << b.get_diamentru_pinioane()[0]; //il indexam


//cout << b.get_diamentru_pinioane()[1];
//cout << b.get_diamentru_pozitie(0); //aici nu se mai face indexare
//cout << b.get_diamentru_pozitie(1);
/*Bicicleta b;
float vector[7];
for (int i = 0;i<7;i++)
vector[i] = i + 2;
b = initializare("Pegas", 1000, 7, vector, false);
b.afisare_functie;
Bicicleta * pBicicleta = &b;
Bicicleta*pBicicleta2 = new Bicicleta();
Bicicleta*vector = new Bicicleta[3];
Bicicleta**pVector = new Bicicleta*[3];
*/
}

//incapsulare=accesul controlat la clase


//metode de acces get si set;
//get=au tipul returnat tipul atributului
//setter=moficia valoarea atributului ;nu returneaza nimic (void set_pret)
//
primeste un parametru de tipul atributului pe care urmeaza sa il setam
//
setter este de tip void
// float get_pret =nu primeste niciun parametru
//this=adresa la obiectul curent
//la apel dam si lista de parametri atunci cand apelam o functie!! chiar daca es
te vida ,adica()
//A nu se folosi cout si cin in functiile membre !! Doar in cele de afisare si d
e citire

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