Advertisement
aidanozo

Untitled

Dec 18th, 2024
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.69 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. class Hartie {
  6. protected:
  7.     char* m_numeFabrica;
  8.     int m_pret;
  9.  
  10. public:
  11.     Hartie(const char* nume = "", int pret = 0)
  12.         : m_pret(pret) {
  13.         m_numeFabrica = new char[strlen(nume) + 1];
  14.         strcpy(m_numeFabrica, nume);
  15.     }
  16.  
  17.     virtual ~Hartie() {
  18.         delete[] m_numeFabrica;
  19.     }
  20.  
  21.     virtual void afisare() const {
  22.         cout << "Hartie: " << m_numeFabrica << ", Pret: " << m_pret << endl;
  23.     }
  24.  
  25.     virtual int getPret() const {
  26.         return m_pret;
  27.     }
  28. };
  29.  
  30. class Carte : virtual public Hartie {
  31. protected:
  32.     float m_greutate;
  33.     int m_pret; // Pret propriu
  34.  
  35. public:
  36.     Carte(const char* nume = "", int pretHartie = 0, int pretCarte = 0, float greutate = 0)
  37.         : Hartie(nume, pretHartie), m_pret(pretCarte), m_greutate(greutate) {}
  38.  
  39.     void afisare() const override {
  40.         cout << "Carte: " << m_numeFabrica << ", Pret hartie: " << Hartie::getPret()
  41.              << ", Pret carte: " << m_pret << ", Greutate: " << m_greutate << endl;
  42.     }
  43.  
  44.     int getPret() const override {
  45.         return m_pret;
  46.     }
  47. };
  48.  
  49. class Coperta : virtual public Hartie {
  50. protected:
  51.     float m_greutate;
  52.     int m_pret; // Pret propriu
  53.  
  54. public:
  55.     Coperta(const char* nume = "", int pretHartie = 0, int pretCoperta = 0, float greutate = 0)
  56.         : Hartie(nume, pretHartie), m_pret(pretCoperta), m_greutate(greutate) {}
  57.  
  58.     void afisare() const override {
  59.         cout << "Coperta: " << m_numeFabrica << ", Pret hartie: " << Hartie::getPret()
  60.              << ", Pret coperta: " << m_pret << ", Greutate: " << m_greutate << endl;
  61.     }
  62.  
  63.     int getPret() const override {
  64.         return m_pret;
  65.     }
  66. };
  67.  
  68. class CarteSiCoperta : public Carte, public Coperta {
  69.     char* m_titluCarte;
  70.  
  71. public:
  72.     CarteSiCoperta(const char* nume = "", int pretHartie = 0, int pretCarte = 0, int pretCoperta = 0,
  73.                    float greutateCarte = 0, float greutateCoperta = 0, const char* titlu = "")
  74.         : Hartie(nume, pretHartie),
  75.           Carte(nume, pretHartie, pretCarte, greutateCarte),
  76.           Coperta(nume, pretHartie, pretCoperta, greutateCoperta) {
  77.         m_titluCarte = new char[strlen(titlu) + 1];
  78.         strcpy(m_titluCarte, titlu);
  79.     }
  80.  
  81.     ~CarteSiCoperta() {
  82.         delete[] m_titluCarte;
  83.     }
  84.  
  85.     void afisare() const override {
  86.         cout << "Carte si Coperta: " << m_titluCarte << ", Pret total: " << getPret() << endl;
  87.     }
  88.  
  89.     int getPret() const override {
  90.         return Hartie::getPret() + Carte::getPret() + Coperta::getPret();
  91.     }
  92. };
  93.  
  94.  
  95.  
  96. int main() {
  97.     const int N = 5;
  98.     Hartie* elemente[N];
  99.  
  100.     // Crearea obiectelor
  101.     elemente[0] = new Hartie("FabricaA", 10);
  102.     elemente[1] = new Carte("FabricaB", 15, 20, 0.5);
  103.     elemente[2] = new Coperta("FabricaC", 10, 25, 0.3);
  104.     elemente[3] = new CarteSiCoperta("FabricaD", 10, 30, 20, 1.0, 0.5, "Titlu1");
  105.     elemente[4] = new CarteSiCoperta("FabricaE", 5, 15, 10, 0.8, 0.4, "Titlu2");
  106.  
  107.     // Afișarea elementelor
  108.     cout << "Elementele initiale:\n";
  109.     for (int i = 0; i < N; ++i) {
  110.         elemente[i]->afisare();
  111.     }
  112.  
  113.     // Sortarea elementelor după preț
  114.     for (int i = 0; i < N - 1; ++i) {
  115.         for (int j = i + 1; j < N; ++j) {
  116.             if (elemente[i]->getPret() > elemente[j]->getPret()) {
  117.                 swap(elemente[i], elemente[j]);
  118.             }
  119.         }
  120.     }
  121.  
  122.     // Afișarea elementelor sortate
  123.     cout << "\nElementele sortate dupa pret:\n";
  124.     for (int i = 0; i < N; ++i) {
  125.         elemente[i]->afisare();
  126.     }
  127.  
  128.     // Eliberarea memoriei
  129.     for (int i = 0; i < N; ++i) {
  130.         delete elemente[i];
  131.     }
  132.  
  133.     return 0;
  134. }
  135.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement