Advertisement
MeehoweCK

Untitled

May 11th, 2024
783
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.80 KB | None | 0 0
  1. #ifndef FIGURY_H
  2. #define FIGURY_H
  3. #include <iostream>
  4. #include <cmath>
  5. using namespace std;
  6.  
  7. class Figure
  8. {
  9. public:
  10.     virtual ~Figure() = default;
  11.     virtual void print() const = 0;
  12.     virtual double getPerimeter() const = 0; //ma dac liczbe
  13. };
  14.  
  15. class Square : public Figure
  16. {
  17. private:
  18.     double bok;
  19. public:
  20.     Square(double a=1) : bok(a) {};
  21.     ~Square()
  22.     {
  23.         cout << "usunieto kwadrat" << endl;
  24.     }
  25.     void print() const
  26.     {
  27.         cout << "KWADRAT ";
  28.     }
  29.     double getPerimeter() const
  30.     {
  31.         return 4*bok;
  32.     }
  33. };
  34.  
  35. class Triangle : public Figure
  36. {
  37. private:
  38.     double bok1, bok2, bok3;
  39. public:
  40.     Triangle(double a=1, double b=1, double c=1) : bok1(a), bok2(b), bok3(c) {};
  41.     ~Triangle()
  42.     {
  43.         cout << "usunieto kwadrat" << endl;
  44.     }
  45.     void print() const
  46.     {
  47.         cout << "TROJKAT ";
  48.     }
  49.     double getPerimeter() const
  50.     {
  51.         return bok1+bok2+bok3;
  52.     }
  53. };
  54.  
  55.  
  56. class Circle : public Figure
  57. {
  58. private:
  59.     double promien;
  60. public:
  61.     Circle(double r=1) : promien(r) {};
  62.     ~Circle()
  63.     {
  64.         cout << "usunieto kolo" << endl;
  65.     }
  66.     void print() const
  67.     {
  68.         cout << "KOLO ";
  69.     }
  70.     double getPerimeter() const
  71.     {
  72.         return 2.0 * M_PI * promien;
  73.     }
  74. };
  75. //Zdefiniować klasę FigureTab z dynamiczną tablicą przechowująca wskaźniki
  76. //do dowolnych figur z utworzonych klas.
  77.  
  78. class FigureTab
  79. {
  80.     int dlugosc;
  81.     Figure **tab;
  82. public:
  83.     FigureTab(int dl=0) : dlugosc(dl)  //konstruktor
  84.     {
  85.         if (dlugosc>0)
  86.         {
  87.             tab = new Figure *[dlugosc] { nullptr };
  88.         }
  89.         else
  90.         {
  91.             dlugosc=0;
  92.             tab=nullptr;
  93.         }
  94.     }
  95.  
  96.     ~FigureTab()
  97.     {
  98.         cout << endl << "destruktor FigureTab zadzialal " << endl;
  99.         for (int i=0; i<dlugosc; i++)
  100.         {
  101.             delete tab[i];
  102.         }
  103.         delete[] tab;
  104.     }
  105.  
  106.     void dodajFigure(Figure* nowa);
  107. };
  108.  
  109. void FigureTab::dodajFigure(Figure* nowa) {
  110.     if (tab == nullptr) {   // tablica nie istnieje
  111.         tab = new Figure * [1];
  112.         tab[0] = nowa;
  113.     }
  114.     else {
  115.         // tymczasowa tablica do przechowania dotychczasowej
  116.         Figure** temp = new Figure * [dlugosc + 1];
  117.         // przepisanie elementów z dotychczasowej tablicy do tymczasowo stworzonej
  118.         for (int i{ 0 }; i < dlugosc; ++i) {
  119.             temp[i] = tab[i];
  120.         }
  121.         delete[] tab;
  122.         temp[dlugosc] = nowa;
  123.         tab = temp;
  124.     }
  125.     ++dlugosc;
  126. }
  127.  
  128. //Zdefiniować metodę pozwalającą na dodanie nowej figury do tablicy i metodę usuwającą
  129. //wszystkie figury z tablicy. Przeciążyć operator indeksowania tak, aby indeksowanie
  130. //elementów zaczynało się od 1.
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151. #endif // FIGURY_H
  152.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement