Advertisement
Tucancitto

DYNAMIC_CAST ŞI LAMBDA EXPRESII

Jul 1st, 2021
926
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.76 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <algorithm>
  5. using namespace std;
  6.  
  7. class Persoana
  8. {
  9. protected:
  10.     string nume, sex;
  11.  
  12. public:
  13.     Persoana(string nume = "", string sex = "") :
  14.         nume(nume), sex(sex) {}
  15.  
  16.     virtual void afisare()
  17.     {
  18.         cout << "Nume : " << nume << endl;
  19.         cout << "Sex : " << sex << endl;
  20.     }
  21. };
  22.  
  23. class Student : public Persoana
  24. {
  25. protected:
  26.     int grupa;
  27.     float medie;
  28.  
  29. public:
  30.     Student(string nume = "", string sex = "", int grupa = 0, float medie = 0) :
  31.         Persoana(nume, sex), grupa(grupa), medie(medie) {}
  32.  
  33.     int getGrupa()
  34.     {
  35.         return grupa;
  36.     }
  37.  
  38.     float getMedie()
  39.     {
  40.         return medie;
  41.     }
  42.  
  43.     void afisare()
  44.     {
  45.         Persoana::afisare();
  46.         cout << "Grupa : " << grupa << endl;
  47.         cout << "Medie : " << medie << endl;
  48.     }
  49. };
  50.  
  51. class Profesor : public Persoana
  52. {
  53. protected:
  54.     int grad;
  55.     float salariu;
  56.  
  57. public:
  58.     Profesor(string nume = "", string sex = "", int grad = 0, float salariu = 0) :
  59.         Persoana(nume, sex), grad(grad), salariu(salariu) {}
  60.  
  61.     int getGrad()
  62.     {
  63.         return grad;
  64.     }
  65.  
  66.     float getSalariu()
  67.     {
  68.         return salariu;
  69.     }
  70.  
  71.     void afisare()
  72.     {
  73.         Persoana::afisare();
  74.         cout << "Grad : " << grad << endl;
  75.         cout << "Salariu : " << salariu << endl;
  76.     }
  77. };
  78.  
  79. int main()
  80. {
  81.     ifstream fin("persoane.in");
  82.     int nrStud, nrProf;
  83.  
  84.     fin >> nrStud >> nrProf;
  85.  
  86.     Persoana** pers = new Persoana * [nrStud + nrProf];
  87.  
  88.     for (int index = 0; index < nrStud + nrProf; ++index)
  89.     {
  90.         string nume, sex;
  91.         fin >> nume >> sex;
  92.  
  93.         if (index < nrStud)
  94.         {
  95.             int grupa;
  96.             float medie;
  97.             fin >> grupa >> medie;
  98.             pers[index] = new Student(nume, sex, grupa, medie);
  99.         }
  100.         else
  101.         {
  102.             int grad;
  103.             float salariu;
  104.             fin >> grad >> salariu;
  105.             pers[index] = new Profesor(nume, sex, grad, salariu);
  106.         }
  107.     }
  108.  
  109.     auto comp1 = [](Persoana* p1, Persoana* p2)
  110.     {
  111.         Student* s1 = dynamic_cast<Student*>(p1);
  112.         Student* s2 = dynamic_cast<Student*>(p2);
  113.  
  114.         return s1->getGrupa() < s2->getGrupa();
  115.     };
  116.     sort(pers, pers + nrStud, comp1);
  117.  
  118.     auto comp2 = [](Persoana* p1, Persoana* p2)
  119.     {
  120.         Profesor* pr1 = dynamic_cast<Profesor*>(p1);
  121.         Profesor* pr2 = dynamic_cast<Profesor*>(p2);
  122.  
  123.         return pr1->getSalariu() < pr2->getSalariu();
  124.     };
  125.     sort(pers + nrStud, pers + nrStud + nrProf, comp2);
  126.  
  127.     for (int index = 0; index < nrStud + nrProf; ++index)
  128.     {
  129.         pers[index]->afisare();
  130.         cout << endl;
  131.     }
  132.     return 0;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement