Documente Academic
Documente Profesional
Documente Cultură
#include<string>
#include<fstream>
class ReviziiAuto
{
const int codRep;
string model;
int pieseSchimbate;
float* pretPiese;
static int nrReparatii;
public:
ReviziiAuto() :codRep(100)
{
this->model = "Ford";
this->pieseSchimbate = 0;
this->pretPiese = NULL;
this->nrReparatii = 0;
}
~ReviziiAuto()
{
if (this->pretPiese != NULL)
{
delete[]this->pretPiese;
}
this->nrReparatii--;
}
//operatori
//operator++ preincrementare
/*ReviziiAuto operator++()
{
this->pieseSchimbate++;
}*/
ReviziiAuto operator++()
{
ReviziiAuto temporar = *this;
for (int i = 0; i < this->pieseSchimbate; i++)
{
this->pretPiese[i]++;
}
return *this;
}
//operator++ postincrementare
ReviziiAuto operator++(int)
{
float* temp = new float[this->pieseSchimbate]; //creez un nou obiect
for (int i = 0; i < this->pieseSchimbate; i++)
{
temp[i] = this->pretPiese[i]; //adaug in el elementele obiectului
vechi
}
if (this->pretPiese != NULL)
{
delete[]this->pretPiese; //sterg obiectul vechi
}
this->pieseSchimbate++; //cresc marimea vectorului temporar cu un
spatiu
this->pretPiese = new float[this->pieseSchimbate]; //realoc spatiu
pentru vectorul nou, cu un spatiu in plus
for (int i = 0; i < pieseSchimbate - 1; i++)
{
this->pretPiese[i] = temp[i]; //adaug elementele din obiectul
temporar
}
this->pretPiese[this->pieseSchimbate-1] = 50; //adaug un pret pe noul
spatiu format
return *this; //pentru ca l-am supraincarcat
}
//operator/=
ReviziiAuto operator/=(float val)
{
ReviziiAuto temporar = *this;
if (val != NULL && val != 0)
{
for (int i = 0; i < this->pieseSchimbate; i++)
{
this->pretPiese[i] /= val;
}
}
return temporar;
}
//operator -- postincrementare
ReviziiAuto operator--(int)
{
float*temp = new float[this->pieseSchimbate];
for (int i = 0; i < pieseSchimbate; i++)
{
temp[i] = this->pretPiese[i];
}
if (this->pretPiese != NULL)
{
delete[] this->pretPiese;
}
this->pieseSchimbate--;
this->pretPiese = new float[this->pieseSchimbate];
for (int i = 0; i <this->pieseSchimbate; i++)
{
this->pretPiese[i] = temp[i];
}
delete[]temp;
return *this;
}
//operator>
bool operator>(ReviziiAuto &r)
{
if (this->pieseSchimbate > r.pieseSchimbate)
return true;
else
return false;
}
//operator !
bool operator ! ()
{
if (this->pretPiese != NULL)
return true;
else
return false;
}
//operator ==
bool operator==(ReviziiAuto &r)
{
if (this->pieseSchimbate == r.pieseSchimbate)
return true;
else
return false;
}
//fisiere
friend ofstream& operator<<(ofstream& out, ReviziiAuto&r)
{
out << r.pieseSchimbate << endl;
for (int i = 0; i < r.pieseSchimbate; i++)
{
out << r.pretPiese[i] << endl;
}
out << r.model << endl;
out << r.nrReparatii << endl;
return out;
}
float calcularePretTotal()
{
float s = 0;
for (int i = 0; i < this->pieseSchimbate; i++)
{
s = s + this->pretPiese[i];
}
return s;
}
//cast
explicit operator float()
{
return calcularePretTotal();
}
//index
float& operator[](int index)
{
if (index >= 0 && index <= this->pieseSchimbate)
return this->pretPiese[index];
else
throw "Index incorect.";
}
//operator()
float operator()()
{
return pretMediu();
}
float pretMediu()
{
float m = 0;
for (int i = 0; i < this->pieseSchimbate; i++)
{
m = this->pretPiese[i] / i;
}
return m;
}
float pretMax()
{
float max = 0;
if (this->pretPiese != NULL)
{
for (int i = 0; i < this->pieseSchimbate; i++)
{
if (pretPiese[i] > max)
max = pretPiese[i];
}
}
return max;
}
float pretMin()
{
float min=pretPiese[0];
if (this->pretPiese != NULL)
{
for (int i = 0; i < this->pieseSchimbate; i++)
{
if (pretPiese[i] < min)
min = pretPiese[i];
}
}
return min;
}
float* sortare()
{
float sort;
if (this->pretPiese != NULL)
{
for (int i = 0; i < this->pieseSchimbate - 1; i++)
for (int j = 1; j < this->pieseSchimbate; j++)
{
if (pretPiese[i] > pretPiese[j])
{
sort = pretPiese[i];
pretPiese[i] = pretPiese[j];
pretPiese[j] = sort;
}
}
}
return this->pretPiese;
}
};
int ReviziiAuto::nrReparatii = 0;
void main()
{
ReviziiAuto r1;
float preturi1[] = { 10.5, 25.5, 20.5 };
ReviziiAuto r2(3, preturi1, "Mercedes", 100);
ReviziiAuto r3 = r2;
ReviziiAuto r4;
r4 = r2;
cout << "Revizia 1: \n " << r1 << endl;
cout << "Reviziza 2:\n " << r2 << endl;
cout << "Reviziza 3: \n" << r3 << endl;
cout << "Revizia 4: \n" << r4 << endl;
/*ReviziiAuto p5;
cin >> p5;
cout << p5;*/
//fisiere text
ofstream f;
f.open("Fisier.txt", ios::out);
ReviziiAuto r6(3, preturi1, "Lexus", 200);
f << r6 << endl;
f.close();
ifstream g;
g.open("Fisier.txt", ios::in);
ReviziiAuto r7;
g >> r7;
g.close();
cout << "Preluare din fisier text: \n" << r7;
//fisiere binare
ofstream fBin;
fBin.open("Fisier1.dat", ios::binary | ios::out);
fBin.write((char*)&r6, sizeof(ReviziiAuto));
fBin.close();
ifstream fBin1;
fBin1.open("Fisier1.dat", ios::binary | ios::in);
fBin1.read((char*)&r6, sizeof(ReviziiAuto));
fBin1.close();
cout << "\nPreluare din fisier binar: \n" << r6;
//operatori
ReviziiAuto r8=r6++;
cout << "Revizia 8 postincrementare: " << r8;
ReviziiAuto r9 = ++r6;
cout << "\n\nRevizia 9 preincrementare: " << r9;
ReviziiAuto r10 = r6--;
cout << "\n\nRevizia 10 postincrrementare --: " << r10;
ReviziiAuto r11;
r11 = r6 + r2;
cout << "\n\nRevizia 11: " << r11 << endl;
if (r1 == r6)
cout << "\n Au numar egal de piese schimbate.";
else
cout << "\nNu au numar egal de piese schimbate;";
//cast
cout <<"\nPret total: "<< (float)r6 << endl;
cout << "\nPiese schimbate: " << (int)r6 << endl;
//index
try
{
cout << "Pretul de pe pozitia index este: " << r6[5];
cout << "Pretul de pe pozitia index este: " << r6[2];
}
catch (exception *ex)
{
cout << ex->what() << "Am prin eroarea." << endl;
}
catch (...)
{
cout << "Am prins eroarea din a 2-a incercare." << endl;
}
//operator() ->functie
cout << "\nPret mediu: " << r6.pretMediu() << endl;
//metode generice
cout << "\nPretul maxim este: " << r6.pretMax() << endl;
cout << "\nPretul minim este: " << r6.pretMin() << endl;
r6.sortare();
cout << "\nRevizia 6 sortata: " << r6 << endl;
//operatori
r6 += 20;
cout << "\nRevizia 6 marita: " << r6 << endl;
r6 /= 2;
cout << "\nRevizia 6 impartita: " << r6 << endl;
}