Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4.  
  5. const float pi = 3.14159;
  6.  
  7. class Figura
  8. {
  9. public:
  10.     virtual float pole() const
  11.     {
  12.         return 330.0;
  13.     }
  14.     Figura() { std::cout << "Tworze Figure" << std::endl; }
  15.     virtual    ~Figura() { std::cout << "Niszcze Figure" << std::endl; }
  16.  
  17. };
  18.  
  19. class Kwadrat : public Figura
  20. {
  21. public:
  22.     Kwadrat(const float bok) : a(bok) { std::cout << "Tworze Kwadrat" << std::endl; }
  23.  
  24.     float pole() const
  25.     {
  26.         return a * a;
  27.     }
  28.  
  29.     ~Kwadrat() { std::cout << "Niszcze Kwadrat" << std::endl; }
  30. private:
  31.     float a; // bok kwadratu
  32. };
  33.  
  34. class Kolo : public Figura
  35. {
  36. public:
  37.     Kolo(const float promien) : r(promien) { std::cout << "Tworze Kolo" << std::endl; }
  38.  
  39.     float pole() const
  40.     {
  41.         return pi * r * r;
  42.     }
  43.  
  44.     ~Kolo() { std::cout << "Niszcze Kolo" << std::endl; }
  45.  
  46. private:
  47.     float r; // promien kola
  48. };
  49.  
  50. class Prostokat : public Figura
  51. {
  52. public:
  53.     Prostokat(const float boka, const float bokb) : a(boka), b(bokb) { std::cout << "Tworze Prostokat" << std::endl; }
  54.  
  55.     float pole() const
  56.     {
  57.         return a*b;
  58.     }
  59.  
  60.     ~Prostokat() { std::cout << "Niszcze Prostokat" << std::endl; }
  61. private:
  62.     float a, b;
  63. };
  64.  
  65.  
  66.  
  67.  
  68. /*void wyswietlPole( Figura &figura )
  69. {
  70. std::cout << figura.pole() << std::endl;
  71. return;
  72. }*/
  73.  
  74.  
  75. Figura* losujFigure()// destruktor ~Figura() wywola sie drugi  raz bo funkcja losujFigure() jest typu Figura. Gdyby byla void to konstuktor wywolal by sie tylko raz .
  76. {
  77.  
  78.     int fi = rand() % 3;
  79.     switch (fi)
  80.     {
  81.     case 0:
  82.     {
  83.         float a;
  84.         a = rand() % 100;
  85.         Kwadrat *wsk=new Kwadrat(a);
  86.         //  std::cout<<"Wylosowano Kwadrat o boku" <<a<<" i polu "<<wsk->pole()<<std::endl;
  87.         std::cout << "Wylosowano Kwadrat o boku" << a << " i polu " << wsk->pole() << std::endl;
  88.         return wsk;
  89.  
  90.         break;
  91.     }
  92.     case 1:
  93.     {
  94.         float r;
  95.         r = rand() % 100;
  96.  
  97.         Kolo *wsk2=new Kolo(r);
  98.         std::cout << "Wylosowano Kolo o promienu " << r << " i polu " << wsk2->pole() << std::endl;
  99.         return wsk2;
  100.         break;
  101.     }
  102.  
  103.     case 2:
  104.     {
  105.         float a;
  106.         a = rand() % 100;
  107.         float b;
  108.         b = rand() % 100;
  109.         Prostokat *wsk3= new Prostokat(a,b);
  110.         std::cout << "Wylosowano Prostokat o bokach " << a << " i  " << b << " i polu " << wsk3->pole() << std::endl;
  111.         return wsk3;
  112.         break;
  113.     }
  114.  
  115.     default:
  116.         //jaki? kod
  117.         break;
  118.     }
  119.  
  120. }
  121.  
  122.  
  123.  
  124. int main() {
  125.     srand(time(NULL));
  126.  
  127.     Figura *wsk = losujFigure();
  128.  
  129.  
  130.  
  131.     std::cout << wsk->pole();
  132.     //delete wsk;// jak to zostawie to sie robi blad : Error in `./a.out': double free or corruption (out)
  133.  
  134.     std::cout << "Zaraz zniszcze obiekt !" << std::endl;
  135.  
  136.     return 0;
  137.  
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement