Advertisement
m4ly

[POLSL][PK3] LAB 3

Jan 2nd, 2014
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.87 KB | None | 0 0
  1. /*
  2. Lab3 Dawid Mocek
  3. */
  4. #include <iostream>
  5. #include <string>
  6. #include <ctime>
  7.  
  8. #include "Figura.h"
  9. #include "Kolo.h"
  10. #include "Kwadrat.h"
  11. #include "Prostokat.h"
  12.  
  13.  
  14. using std::string;
  15. using std::cout;
  16. using std::endl;
  17. using std::cin;
  18.  
  19. #define FIGSIZE 10
  20.  
  21. string randomStrGen(int length)
  22. {
  23.     static string charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
  24.     string result;
  25.     result.resize(length);
  26.  
  27.     for (int i = 0; i < length; i++)
  28.         result[i] = charset[rand() % charset.length()];
  29.  
  30.     return result;
  31. }
  32.  
  33. double fRand(double fMin, double fMax)
  34. {
  35.     double f = (double)rand() / RAND_MAX;
  36.     return fMin + f * (fMax - fMin);
  37. }
  38.  
  39. int main(void)
  40. {
  41.     srand(time(NULL));
  42.     int breakpoint;
  43.    
  44.     /*
  45.     Zad 1 Pytania:
  46.     Dlaczego tworzymy statyczne pole do zliczania obiektów klasy ? Dlaczego metoda wypisująca liczbę obiektów
  47.     klasy jest statyczna ? Jakie operacje powinny mieć miejsce w konstruktorach i destruktorze ? Odpowiedź uzasadnij
  48.    
  49.     Odpowiedz: ponieważ pole statyczne jest powiązane z klasą a nie samym obiektem dlatego powstanie jedna instancja tego pola. Statyczna metoda daje nam globalny dostep do
  50.     klasy nawet jesli jest ona nie zainicjowana. W konstruktorze musimy zadbać o zwiększenie statycznej Ilosc o +=1 w celu zliczania Instacji nowo utworzonego obiektu oraz ustawieniu
  51.     domyślnych wartość atrybutów w celu pozbycia się `śmieci`
  52.     Natomiast w destrutkorze zmiejszamy `Ilosc` o -=1 - usuwamy obiekt wiec liczba instancji zmniejsza się oraz po pracy na obiekcie warto ustawiać atrybuty klasy na domyslne, tak jak
  53.     w konstruktorze.
  54.  
  55.     */
  56.  
  57.     /* Zadanie 4(1pkt) W programie stwórz tablicę 10 wskaźników na klasę bazową. Następnie wygeneruj losowo obiekty klasy bazowej lub pochodnych */
  58.    
  59.     cout << "Rezerw. pamiec dla 10 elem. Figura lub pochodnych. Kstr. _domyslny_ Figura() wykona sie 10 razy czyli static int Ilosc = 10;" << endl;
  60.    
  61.     Figura *figArr = new Figura[FIGSIZE];
  62.    
  63.     cout << "Jest ich 10 ?" << endl;
  64.     figArr[0].Wypisz();
  65.    
  66.     for (int i = 0; i < FIGSIZE; i++)
  67.     {
  68.         // Każdy wygenerowany obiekt po stworzeniu powinien wypisać informację o sobie oraz
  69.         // zostać wstawiony na kolejne miejsce tablicy.Przejrzyj tablicę po kolei i wypisz zawartość każdego obiektu.
  70.  
  71.         cout << "Iteracja nr: " << i << endl << endl;
  72.         int rrand = static_cast<int>(fRand(1, 5));
  73.  
  74.         if (1 == rrand)
  75.         {
  76.             figArr[i] = Kolo("Ko: "+randomStrGen(3), fRand(20, 30));
  77.             cout << "Ko srodku: " << figArr[i] << endl << endl;
  78.         }
  79.         else if (rrand == 2)
  80.         {
  81.             figArr[i] = Kwadrat("Kw: " + randomStrGen(3), fRand(20, 30));
  82.             cout << "Kw srodku: " << figArr[i] << endl << endl;
  83.         }
  84.         else
  85.         {
  86.             figArr[i] = Figura("Fi: " + randomStrGen(3), fRand(20, 30));
  87.             cout << "Fi srodku: " << figArr[i] << endl << endl;
  88.         }
  89.  
  90.     }
  91.     cout << "To ile mam w koncu tych instancji ?" << endl;
  92.     figArr[0].Wypisz(); // Pokazuje 10
  93.    
  94.     delete[] figArr;
  95.    
  96.     breakpoint = 0;
  97.    
  98.     /* Pytania: Jaka jest różnica między pierwszym komunikatem wypisanym przez każdy obiekt, a kolejnym? Dlaczego tak się dzieje ?
  99.        Odpowiedz: Nazwa i Pole ulega dynamicznej zmianie. Statyczna Ilosc już została ustawiona podczas rezerwacji pamieci przez new[] i jest stała dla już utworzonych obiektów. */
  100.  
  101.  
  102.     /*  Zadanie 5 (1 pkt.)
  103.         Program z poprzedniego punktu rozbuduj o sprawdzenie liczby obiektów klasy figura w następujących
  104.         miejscach :
  105.         Przed rozpoczęciem generowania obiektów
  106.         Po wygenerowaniu obiektów
  107.         Po zwolnieniu zasobów przydzielonych obiektom
  108.     */
  109.    
  110.    
  111.     cout << "Rezerw. pamiec dla 10 elem." << endl;
  112.  
  113.     Figura *figArr2 = new Figura[FIGSIZE];
  114.  
  115.     for (int i = 0; i < FIGSIZE; ++i)
  116.     {
  117.         int rrand = static_cast<int>(fRand(1, 5));
  118.  
  119.         cout << "|## Przed rozpoczeciem generowania obiektu:" << endl;
  120.         cout << "|## " << figArr2[i] << endl;
  121.         if (1 == rrand)
  122.         {
  123.             figArr2[i] = Kolo("Ko: " + randomStrGen(3), fRand(20, 30));
  124.         }
  125.         else if (rrand == 2)
  126.         {
  127.             figArr2[i] = Kwadrat("Kw:" + randomStrGen(3), fRand(20, 30));
  128.         }
  129.         else
  130.         {
  131.             figArr2[i] = Figura("Fi:" + randomStrGen(3), fRand(20, 30));
  132.         }
  133.  
  134.         cout << "|== Po wygenerowaniu obiektu" << endl;
  135.         cout << "|== " << figArr2[i] << endl;
  136.        
  137.         cout << "|~~ Po zwolnieniu zasobów przydzielonemu obiektowi:" << endl;
  138.         figArr2[i].~Figura();
  139.         cout << "|~~ " << figArr2[i] << endl;
  140.        
  141.     }
  142.  
  143.     delete[] figArr2;
  144.    
  145.     breakpoint = 0;
  146.  
  147.     /* Zadanie 6 (1 pkt.)
  148.        Napis klasę Prostokąt, która jest publiczną pochodną klasy Kwadrat. Klasa powinna zawierać:
  149.      
  150.        Wykorzystując obiekt klasy Prostokąt zaprezentuj kolejność wywoływania konstruktorów i destruktorów.
  151.     */
  152.  
  153.     // Dla
  154.     Prostokat  *p = new Prostokat();
  155.     /*
  156.     Mamy:
  157.     1 Konst Figura::Figura()
  158.     2 Konst Kwadrat::Kwadrat()
  159.     3 Konst Prostokat::Prostokat()
  160.     */
  161.     // I dla
  162.     delete p;
  163.     /*
  164.     Mamy:
  165.     1 Dest Prostokat::~Prostokat()
  166.     2 Dest Kwadrat::~Kwadrat()
  167.     3 Dest Figura::~Figura()
  168.     */
  169.    
  170.  
  171.     return 0;
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement