Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <ctime>
- const float pi = 3.14159;
- class Figura
- {
- public:
- virtual float pole() const
- {
- return 330.0;
- }
- Figura() { std::cout << "Tworze Figure" << std::endl; }
- virtual ~Figura() { std::cout << "Niszcze Figure" << std::endl; }
- };
- class Kwadrat : public Figura
- {
- public:
- Kwadrat(const float bok) : a(bok) { std::cout << "Tworze Kwadrat" << std::endl; }
- float pole() const
- {
- return a * a;
- }
- ~Kwadrat() { std::cout << "Niszcze Kwadrat" << std::endl; }
- private:
- float a; // bok kwadratu
- };
- class Kolo : public Figura
- {
- public:
- Kolo(const float promien) : r(promien) { std::cout << "Tworze Kolo" << std::endl; }
- float pole() const
- {
- return pi * r * r;
- }
- ~Kolo() { std::cout << "Niszcze Kolo" << std::endl; }
- private:
- float r; // promien kola
- };
- class Prostokat : public Figura
- {
- public:
- Prostokat(const float boka, const float bokb) : a(boka), b(bokb) { std::cout << "Tworze Prostokat" << std::endl; }
- float pole() const
- {
- return a*b;
- }
- ~Prostokat() { std::cout << "Niszcze Prostokat" << std::endl; }
- private:
- float a, b;
- };
- /*void wyswietlPole( Figura &figura )
- {
- std::cout << figura.pole() << std::endl;
- return;
- }*/
- Figura* losujFigure()// destruktor ~Figura() wywola sie drugi raz bo funkcja losujFigure() jest typu Figura. Gdyby byla void to konstuktor wywolal by sie tylko raz .
- {
- int fi = rand() % 3;
- switch (fi)
- {
- case 0:
- {
- float a;
- a = rand() % 100;
- Kwadrat *wsk=new Kwadrat(a);
- // std::cout<<"Wylosowano Kwadrat o boku" <<a<<" i polu "<<wsk->pole()<<std::endl;
- std::cout << "Wylosowano Kwadrat o boku" << a << " i polu " << wsk->pole() << std::endl;
- return wsk;
- break;
- }
- case 1:
- {
- float r;
- r = rand() % 100;
- Kolo *wsk2=new Kolo(r);
- std::cout << "Wylosowano Kolo o promienu " << r << " i polu " << wsk2->pole() << std::endl;
- return wsk2;
- break;
- }
- case 2:
- {
- float a;
- a = rand() % 100;
- float b;
- b = rand() % 100;
- Prostokat *wsk3= new Prostokat(a,b);
- std::cout << "Wylosowano Prostokat o bokach " << a << " i " << b << " i polu " << wsk3->pole() << std::endl;
- return wsk3;
- break;
- }
- default:
- //jaki? kod
- break;
- }
- }
- int main() {
- srand(time(NULL));
- Figura *wsk = losujFigure();
- std::cout << wsk->pole();
- //delete wsk;// jak to zostawie to sie robi blad : Error in `./a.out': double free or corruption (out)
- std::cout << "Zaraz zniszcze obiekt !" << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement