Advertisement
Five_NT

[POO] Test2_exp7

Apr 5th, 2016
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.96 KB | None | 0 0
  1. /*
  2. Se da o clasa de baza - Masina.
  3. O masina are urmatoarele caracteristici:
  4.  - anul de fabricatie
  5.  - culoare
  6.  - viteza maxima
  7.  - Nume
  8.  
  9. * Derivati din clasa Masina 3 tipuri de masini: Dacia, Renault si BMW
  10. * Creati un vector de masini
  11. * Realizati o sortare:
  12.   - crescatoare a masinilor in functie de viteza
  13.   - descrescatoare in functie de anul de fabricatie
  14.  
  15. Trebuie sa creati clasa Dacia.cpp, Renault.cpp si BMW.cpp care sa fie derivate din clasa Masina si sa implementeze metodele.
  16. Se acorda 2 pct pentru implementarea corecta a acestei ierarhii de clase (membri in clasa si constructor/destructor).
  17.  
  18. Fisierele nu contin si include-urile necesare (acestea trebuie sa le adaugati voi).
  19. 2 pct se dau daca programul compileaza.
  20. Pentru sortarea masinilor se vor folosi functii din STL.
  21. */
  22.  
  23. #include "stdafx.h"
  24. #include <iostream>
  25. #include <vector>
  26. #include <string>
  27. #include <stdlib.h>
  28. #include <algorithm>
  29.  
  30. using namespace std;
  31.  
  32. string rosu("rosu");
  33. string verde("verde");
  34.  
  35. typedef struct _Specificatie {
  36.     int an;
  37.     string nume;
  38.     int viteza_max;
  39. } Specificatie;
  40.  
  41. class Masina
  42. {
  43. private:
  44.     string culoare;
  45.     _Specificatie Specificatie;
  46.  
  47.     //[2p] Adaugati Caracteristici masina.
  48.  
  49. public:
  50.     //[3p] Returneaza an de fabricatie al masinii. -> cate 1p pentru implementarea din fiecare clasa derivata
  51.     virtual int getAn_fabricatie() = 0;
  52.  
  53.     //[3p] Returneaza culoarea masinii. -> cate 1p pentru implementarea din fiecare clasa derivata
  54.     virtual string getCuloare() = 0;
  55.  
  56.     //[3p] Returneaza viteza maxima a masinii. -> cate 1p pentru implementarea din fiecare clasa derivata
  57.     virtual int getViteza_maxima() = 0;
  58.  
  59.     //[3p] Seteaza numele masinii -> cate 1p pentru implementarea din fiecare clasa derivata
  60.     virtual void setNume(string name) = 0;
  61.  
  62.     //[3p] Returneaza numele masinii. -> cate 1p pentru implementarea din fiecare clasa derivata
  63.     virtual string getNume() = 0;
  64. };
  65.  
  66.  
  67. class Dacia : public Masina
  68. {
  69. private:
  70.     string culoare;
  71.     _Specificatie D;
  72.  
  73. public:
  74.     Dacia(int an_fab, string col, int vit_max) {
  75.         this->D.an = an_fab;
  76.         this->culoare = col;
  77.         this->D.viteza_max = vit_max;
  78.     }
  79.  
  80.     int getAn_fabricatie() {
  81.         return this->D.an;
  82.     }
  83.  
  84.     string getCuloare() {
  85.         return this->culoare;
  86.     }
  87.  
  88.     int getViteza_maxima() {
  89.         return this->D.viteza_max;
  90.     }
  91.  
  92.     void setNume(string nume) {
  93.         this->D.nume = nume;
  94.     }
  95.  
  96.     string getNume() {
  97.         return this->D.nume;
  98.     }
  99. };
  100.  
  101. class Renault : public Masina
  102. {
  103. private:
  104.     string culoare;
  105.     _Specificatie D;
  106.  
  107. public:
  108.     Renault(int an_fab, string col, int vit_max) {
  109.         this->D.an = an_fab;
  110.         this->culoare = col;
  111.         this->D.viteza_max = vit_max;
  112.     }
  113.  
  114.     int getAn_fabricatie() {
  115.         return this->D.an;
  116.     }
  117.  
  118.     string getCuloare() {
  119.         return this->culoare;
  120.     }
  121.  
  122.     int getViteza_maxima() {
  123.         return this->D.viteza_max;
  124.     }
  125.  
  126.     void setNume(string nume) {
  127.         this->D.nume = nume;
  128.     }
  129.  
  130.     string getNume() {
  131.         return this->D.nume;
  132.     }
  133. };
  134.  
  135. class BMW : public Masina
  136. {
  137. private:
  138.     string culoare;
  139.     _Specificatie D;
  140.  
  141. public:
  142.     BMW(int an_fab, string col, int vit_max) {
  143.         this->D.an = an_fab;
  144.         this->culoare = col;
  145.         this->D.viteza_max = vit_max;
  146.     }
  147.  
  148.     int getAn_fabricatie() {
  149.         return this->D.an;
  150.     }
  151.  
  152.     string getCuloare() {
  153.         return this->culoare;
  154.     }
  155.  
  156.     int getViteza_maxima() {
  157.         return this->D.viteza_max;
  158.     }
  159.  
  160.     void setNume(string nume) {
  161.         this->D.nume = nume;
  162.     }
  163.  
  164.     string getNume() {
  165.         return this->D.nume;
  166.     }
  167. };
  168.  
  169. bool comp_vmax(Masina* o1, Masina* o2) { return (o1->getViteza_maxima() < o2->getViteza_maxima()); }
  170. bool comp_an(Masina* o1, Masina* o2) { return (o1->getAn_fabricatie() < o2->getAn_fabricatie()); }
  171.  
  172. void main()
  173. {
  174.     Masina **cars = (Masina**)malloc(6 * sizeof(Masina*));
  175.     string names[6] = { "Dacia 1310" , "Dacia Logan", "Renault C4", "Renault C5", "BMW X4", "BMW X5"};
  176.  
  177.  
  178.     cars[0] = (Masina*) new Dacia(1994, "rosu", 140);
  179.     cars[1] = (Masina*) new Dacia(2004, "gri", 135);
  180.     cars[2] = (Masina*) new Renault(2010, "verde", 180);
  181.     cars[3] = (Masina*) new Renault(2009, "negru", 165);
  182.     cars[4] = (Masina*) new BMW(2014, "alba", 210);
  183.     cars[5] = (Masina*) new BMW(1994, "albastra", 190);
  184.  
  185.     // Cream un vector de masini
  186.  
  187.     vector <Masina*> masini;
  188.     for (int i = 0; i<6; i++)
  189.     {
  190.         cars[i]->setNume(names[i]);
  191.         masini.push_back(cars[i]);
  192.     }
  193.    
  194.     //[2p] afisare caracteristici masini (parcurgere cu iterator)
  195.     cout << "*** Vehicule ****\n";
  196.     for (auto i : masini) {
  197.         cout << i->getNume() << ": " << i->getAn_fabricatie() << " - " << i->getCuloare() << " - " << i->getViteza_maxima() << '\n';
  198.     }
  199.  
  200.     //[2p] Sortam vectorul crescator in functie de viteza
  201.     cout << "\n\n*** sort by vMax ***\n";
  202.     sort(masini.begin(), masini.end(), comp_vmax);
  203.     for (auto i : masini) {
  204.         cout << i->getNume() << ": " << i->getViteza_maxima() << '\n';
  205.     }
  206.  
  207.     //[2p] Sortam vectorul descrescator in functie de anul de fabricatie
  208.     cout << "\n\n*** sort by an ***\n";
  209.     sort(masini.begin(), masini.end(), comp_an);
  210.     for (auto i : masini) {
  211.         cout << i->getNume() << ": " << i->getAn_fabricatie() << '\n';
  212.     }
  213. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement