Advertisement
Guest User

Untitled

a guest
Jan 19th, 2020
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.23 KB | None | 0 0
  1. #include<iostream>
  2. #include<string>
  3. #include<fstream>
  4.  
  5. using namespace std;
  6.  
  7. class RevizieAuto {
  8.  
  9. private:
  10.     string nume = ":)";
  11.     int* costRevizii = NULL;
  12.     int revizii = 0;
  13.     const int id=0;
  14.     static int k;
  15.  
  16. public:
  17.  
  18.     RevizieAuto():id(++this->k)
  19.     {
  20.         cout << "default constructor " << endl;
  21.         this->revizii = 0;
  22.     }
  23.  
  24.     void setRevizii(int revizii)
  25.     {
  26.         if (revizii > this->revizii)
  27.             cout << "prea multe revizii" << endl;
  28.         else
  29.             this->revizii = revizii;
  30.        
  31.     }
  32.     int getRevizii()
  33.     {
  34.         return this->revizii;
  35.     }
  36.  
  37.     void setNume(string nume)
  38.     {
  39.         if (nume == "bmw")
  40.             cout << "nu reparam cazane ";
  41.         else
  42.             this->nume = nume;
  43.  
  44.     }
  45.     string getnume()
  46.     {
  47.         return this->nume;
  48.  
  49.     }
  50.  
  51.     float medie()
  52.     {
  53.         float s = 0, medie = 0;
  54.         for (int i = 0; i < this->revizii; i++)
  55.         {
  56.             s++;
  57.             medie = medie + this->costRevizii[i];
  58.         }
  59.         return medie / s;
  60.     }
  61.  
  62.     RevizieAuto(string nume, int* cost, int nr) :id(++this->k)
  63.     {
  64.         this->nume = nume;
  65.         this->revizii = nr;
  66.         this->costRevizii = new int[nr];
  67.         for (int i = 0; i < nr; i++)
  68.             this->costRevizii[i] = cost[i];
  69.  
  70.     }
  71.  
  72.     RevizieAuto(const RevizieAuto& r)
  73.     {
  74.         this->nume = r.nume;
  75.         this->revizii = r.revizii;
  76.         this->costRevizii = new int[r.revizii];
  77.         for (int i = 0; i < r.revizii; i++)
  78.             this->costRevizii[i] = r.costRevizii[i];
  79.  
  80.  
  81.     }
  82.  
  83.     RevizieAuto operator =(const RevizieAuto& r)
  84.     {
  85.         this->nume = r.nume;
  86.         this->revizii = r.revizii;
  87.         if (this->costRevizii != NULL)
  88.             delete[] this->costRevizii;
  89.         this->costRevizii = new int[r.revizii];
  90.         for (int i = 0; i < r.revizii; i++)
  91.             this->costRevizii[i] = r.costRevizii[i];
  92.  
  93.         return *this;
  94.     }
  95.  
  96.     ~RevizieAuto()
  97.     {
  98.         if (this->costRevizii != NULL)
  99.             delete[] this->costRevizii;
  100.         this->k--;
  101.     }
  102.  
  103.     friend ostream& operator <<(ostream& out, const RevizieAuto& r);
  104.     friend bool operator !(RevizieAuto& r);
  105.  
  106.     friend void operator >>(istream& in, RevizieAuto& r);
  107.     friend ofstream& operator << (ofstream& fout, const RevizieAuto& r);
  108.     friend void operator >>(ifstream& fin, RevizieAuto& r);
  109.  
  110.     virtual int getcost()
  111.     {
  112.         int s = 0;
  113.         for (int i = 0; i < this->revizii-1; i++)
  114.         {
  115.             s = s + this->costRevizii[i];
  116.  
  117.  
  118.  
  119.         }
  120.         return  s;
  121.     }
  122. };
  123.  
  124. int RevizieAuto::k = 0;
  125.  
  126. ostream& operator << (ostream& out, const RevizieAuto& r)
  127. {
  128.     out << "nume: " << r.nume << endl;
  129.     out << "nr revizii: " << r.revizii << endl;
  130.     for (int i = 0; i < r.revizii; i++)
  131.         out << "cost revizie: " << r.costRevizii[i] << " ";
  132.  
  133.     return out;
  134.  
  135. }
  136. ofstream& operator << (ofstream& fout, const RevizieAuto& r)
  137. {
  138.     fout << "nume: " << r.nume << endl;
  139.     fout << "nr revizii: " << r.revizii << endl;
  140.     for (int i = 0; i < r.revizii; i++)
  141.         fout << "cost revizie: " << r.costRevizii[i] << " ";
  142.  
  143.     return fout;
  144.  
  145. }
  146.  
  147. void operator >>(istream& in, RevizieAuto& r)
  148. {
  149.     cout << "nume: ";
  150.     in >> r.nume;
  151.     cout << "revizii: ";
  152.     in >> r.revizii;
  153.     r.costRevizii = new int[r.revizii];
  154.     for (int i = 0; i < r.revizii; i++)
  155.     {
  156.         cout << "cost revizii: ";
  157.         in >> r.costRevizii[i];
  158.     }
  159.        
  160. }
  161. void operator >>(ifstream& fin, RevizieAuto& r)
  162. {
  163.     cout << "id: ";
  164.     cout << "nume: ";
  165.     fin >> r.nume;
  166.     cout << "revizii: ";
  167.     fin >> r.revizii;
  168.     r.costRevizii = new int[r.revizii];
  169.     for (int i = 0; i < r.revizii; i++)
  170.     {
  171.         cout << "cost revizii: ";
  172.         fin >> r.costRevizii[i];
  173.     }
  174.  
  175. }
  176.  
  177. bool operator !(RevizieAuto& r)
  178. {
  179.     bool reviziegratis = false;
  180.     for (int i = 0; i < r.revizii; i++)
  181.         if (r.costRevizii[i] == 0)
  182.             reviziegratis = true;
  183.  
  184.     return reviziegratis;
  185.    
  186. }
  187.  
  188. bool operator> (RevizieAuto r1, RevizieAuto r2)
  189. {
  190.     if (r1.getRevizii() > r2.getRevizii())
  191.         return true;
  192.     else
  193.         return false;
  194. }
  195.  
  196. class procedura : public RevizieAuto {
  197.  
  198. protected:
  199.     string nume = "default";
  200.     int cost = 0;
  201. public:
  202.     procedura(RevizieAuto r ,string nume, int cost):RevizieAuto(r)
  203.     {
  204.         this->nume = nume;
  205.         this->cost = cost;
  206.     }
  207.  
  208.     int getcost()
  209.     {
  210.         return this->cost;
  211.  
  212.     }
  213.    
  214.     friend ostream& operator << (ostream& out, const procedura& p);
  215. };
  216.  
  217. ostream& operator <<(ostream& out, const procedura& p)
  218. {
  219.     out << p.nume;
  220.     out << p.cost;
  221.     return out;
  222.  
  223. }
  224.  
  225. int main()
  226. {
  227.     int v[5] = { 30,0,500,400,300 };
  228.     RevizieAuto r1;
  229.     RevizieAuto r2("revizie 2", v, 5);
  230.     cout << r2;
  231.  
  232.     cout << "test copy const:" << endl;
  233.     RevizieAuto r3 = r2;
  234.     cout << "test operator =" << endl;
  235.     RevizieAuto r4;
  236.     r4 = r2;
  237.     cout << r4 << endl;
  238.  
  239.  
  240.     r4.setRevizii(4);
  241.     cout << r4<<endl;
  242.  
  243.     r4.setNume("bmw");
  244.     cout << r4.getnume() << endl;
  245.  
  246.     cout << "medie cost revizii: " << r4.medie() << endl;
  247.  
  248.     if (!r4)
  249.         cout << "avem revizie gratis " << endl;
  250.     else
  251.         cout << " nu avem revizie gratis " << endl;
  252.  
  253.    
  254.     if (r4 > r3)
  255.         cout << "r4 are mai multe revizii ca r3";
  256.     else
  257.         cout << "r3 are mai multe hahahah" << endl;
  258.  
  259.     cout << "test cin: " << endl;
  260.     //RevizieAuto f5;
  261.     //cin >> f5;
  262.     //cout << f5 << endl;
  263.     RevizieAuto* r = new RevizieAuto[3];
  264.  
  265.  
  266.     ifstream f("cacamaca.txt");
  267.     for(int i=0;i<3;i++)
  268.     f >> r[i];
  269.     for (int i = 0; i < 3; i++)
  270.         cout << r[i]<<endl;
  271.     cout << "test virtualizare-----------------------------" << endl;
  272.  
  273.     procedura p(r3, "nume procedura", 100);
  274.    
  275.     RevizieAuto *vector[2];
  276.     vector[0] = new RevizieAuto (r2);
  277.     vector[1] = new procedura (p);
  278.     for (int i = 0; i < 2; i++)
  279.         cout << vector[i]->getcost() << endl;
  280.  
  281. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement