Advertisement
Paszta

Absolutne glupoty i nic nie dziala (żartowalam hihi))

Nov 27th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.39 KB | None | 0 0
  1. #include <iostream>
  2. #include <sstream>
  3. #include<time.h>
  4. #include<assert.h>
  5. #include<cassert>
  6. using namespace std;
  7.  
  8. class zwiesz{
  9.    string imie;
  10.    static int licznik;  // pole statyczne dla calej klasy, wartosc ustawiana poza klasa
  11.  
  12. protected:
  13.    int glod =0;
  14.    int pragnienie =0;
  15.    int zmeczenie=0;
  16.    int humor=0;
  17.  
  18. public:
  19.    zwiesz(string imie)   // konstruktor klasy zwiesz
  20.    {
  21.        this->imie=imie;
  22.        licznik++;
  23.  
  24.    }
  25.    void ustaw_imie(string imie){
  26.        this->imie=imie;
  27.    }
  28.  
  29.    const string naLancuch(){  //metida zwracajaca stala referencje
  30.  
  31.         stringstream ss;
  32.         ss << dajzwierza()  << imie << endl << "Glod: " << glod << endl << "Pragnienie: " << pragnienie << endl << "Zmeczenie: " << zmeczenie << endl << "Humor: " << humor << endl;
  33.         return ss.str();
  34.    }
  35.    const string naLancuch(int gender){ // drugi na lancuch wyswietlajacy tez plec
  36.  
  37.         stringstream ss;
  38.         ss << dajzwierza() << ((gender == 0)?"Pan Pies ":"Pani Pies ")  << imie << endl << "Glod: " << glod << endl << "Pragnienie: " << pragnienie << endl << "Zmeczenie: " << zmeczenie << endl << "Humor: " << humor << endl;
  39.         return ss.str();
  40. // zawiera skrocony if ----->  (warunek) ? co jeśli spelniony : co jesli nie spelniony
  41.    }
  42.  
  43.    static int ile_zwierzat(){     //metoda statyczna
  44.        return licznik;
  45.    }
  46.    virtual const string dajzwierza() // metoda wirtualna
  47.    {
  48.          return "Zwierz : ";
  49.    }
  50.  
  51.    friend ostream & operator<< (ostream & strumien, zwiesz &zw); // deklaracja przyjazni
  52.  
  53. };
  54.  
  55. ostream & operator<< (ostream & strumien, zwiesz &zw){
  56.     strumien << zw.dajzwierza()  << zw.imie << endl << "Glod: " << zw.glod << endl << "Pragnienie: " << zw.pragnienie << endl << "Zmeczenie: " << zw.zmeczenie << endl << "Humor: " << zw.humor << endl;
  57.     return strumien; // funkcja korzystajaca z klasy zwiesz nie bedaca jej metoda
  58. }
  59.  
  60.  
  61. class funckje_zyciowe{     // klasa abstrakcyjna
  62. public:
  63.     virtual void jedz(int ilosc_jedzenia)=0;
  64.     virtual void pij(int ilosc_wody)=0;   // czyste metody wirtualne musza byc                                                                   
  65.                                               wyzerowane
  66.     virtual void spij(int czas)=0;
  67.     virtual void baw_sie(int czas)=0;
  68. };
  69. class miska
  70. {
  71.     int porcje;
  72. public:
  73.     miska operator()(int porcja)
  74.     {
  75.         porcje=porcja;
  76.         return *this;
  77.     }
  78.     int dajporcje()
  79.     {
  80.         return porcje;
  81.     }
  82. };
  83.  
  84. class pijes : public zwiesz, public funckje_zyciowe   // wielodziedziczenie publiczne
  85. {
  86.  
  87.     friend class czlowiek;
  88.     void jedz(miska &m, int ilosc)
  89.     {
  90.         m(ilosc);
  91.         glod -= m.dajporcje();
  92.         m(0);
  93.     }
  94. public:
  95.     enum  plec{Pan_pies ,Pani_pies};  // dekl typu wyliczeniowego
  96.     plec gender=static_cast<plec>(/*rand()%2*/1); // losowe wybieranie plci
  97.     pijes(string imie) : zwiesz(imie){}   // klasa pijes korzysta z konstruktora klasy               
  98.                                               zwiesz
  99.     void szczek()
  100.     {
  101.         cout << "Hau hau hau" << endl;
  102.     }
  103.     void podajLape()
  104.     {
  105.         cout << "Pies podal lape" << endl;
  106.     }
  107.     const string dajzwierza()
  108.     {
  109.           return "Pies : ";
  110.     }
  111.     void jedz(int ilosc_jedzenia)
  112.     {
  113.         glod-=ilosc_jedzenia;
  114.     }
  115.     void pij(int ilosc_wody)
  116.     {
  117.         pragnienie -= ilosc_wody;
  118.     }
  119.     void spij(int czas)
  120.     {
  121.         zmeczenie -= czas;
  122.     }
  123.     void baw_sie(int czas)
  124.     {
  125.         glod += czas;
  126.         pragnienie += czas;
  127.         zmeczenie += czas;
  128.         humor += czas;
  129.     }
  130.     pijes operator+(pijes &p)   // przeciazenie + zeby assert mogl sprawdzac plec psow
  131.     {
  132.  
  133.         assert(gender /*!=*/ == p.gender);  // pierwszy gender to dla ktorego wywolujemy a p.gender to dla ktorego przesylamy do funkcji
  134.         pijes bombelek("Purchlak");
  135.         return bombelek;  //funkcja typu pijes bo zwraca obiekt tego typu
  136.     }
  137.     void operator<<(miska &m)  // przeciazenie << zeby mozna bylo psa nakarmic z klasy miska
  138.     {
  139.         glod -= m.dajporcje();
  140.         m(0);
  141.     }
  142.  
  143. };
  144.  
  145. class kitku : public zwiesz, public funckje_zyciowe
  146. {
  147. public:
  148.     kitku(string imie) : zwiesz(imie){}
  149.     void miaumiau()
  150.     {
  151.         cout << "miau miau miau" << endl;
  152.     }
  153.     void myjsie()
  154.     {
  155.         cout << "Myju myju" << endl;
  156.     }
  157.     const string dajzwierza()
  158.     {
  159.           return "Kot : ";
  160.     }
  161.     void jedz(int ilosc_jedzenia)
  162.     {
  163.         glod-=ilosc_jedzenia;
  164.     }
  165.     void pij(int ilosc_wody)
  166.     {
  167.         pragnienie -= ilosc_wody;
  168.     }
  169.     void spij(int czas)
  170.     {
  171.         zmeczenie -= czas;
  172.     }
  173.     void baw_sie(int czas)
  174.     {
  175.         glod += czas;
  176.         pragnienie += czas;
  177.         zmeczenie += czas;
  178.         humor += czas;
  179.     }
  180. };
  181. class schronisko_dla_zwierzat
  182. {
  183.     zwiesz *tab[100];    // tablica wsk
  184. public:
  185.     void daj_do_Schroniska(zwiesz *gomez, int numer)
  186.     {
  187.         tab[numer]=gomez;   // ustawienie obiektow na poszczegolnych miejscach tablicy
  188.     }
  189.     zwiesz *zabierz_ze_schroniska(int numer)    // typ zwiesz bo ma zwrocic element typu         
  190.                                                    zwiesz
  191.     {
  192.         return tab[numer];
  193.     }
  194. };
  195. class czlowiek
  196. {
  197.     enum plec{kobieta, mezczyzna};
  198.     string imie;
  199.     int wiek;
  200.     plec gender;
  201. public:
  202.     czlowiek(int wiek, string imie)
  203.     {
  204.         gender=static_cast<plec>(rand()%2);
  205.         this->wiek=wiek;
  206.         this->imie=imie;
  207.     }
  208.     const void wyswietl(ostream& ss){
  209.  
  210.  
  211.          ss << ((gender == 0)?"Pan ":"Pani ")  << imie << endl << "Wiek "<< wiek << endl << endl;
  212.  
  213.     }
  214.     void karmpsa(pijes &p, miska &m,  int ilosc) // funkcja wykorzystujaca dwie klasy
  215.     {
  216.         p.jedz(m, ilosc);
  217.     }
  218.  
  219. };
  220.  
  221. int zwiesz::licznik = 0;   // ustawienie wartosci pola statycznego w klasie zwiesz
  222. bool porownaj(zwiesz z1, zwiesz z2){
  223.     if(z1.naLancuch() == z2.naLancuch()) return true;
  224.     else return false;
  225. }
  226.  
  227. int main()
  228. {
  229.     srand(time(NULL));
  230.     zwiesz z1("Henryczek");  
  231.     zwiesz z2("Tadzio");
  232.     cout << z1.naLancuch() << endl;
  233.     cout << z2.naLancuch() << endl;
  234.     z2.ustaw_imie("Stasio");
  235.     cout << z2.naLancuch() << endl;
  236.     cout << porownaj(z1, z2)<< endl;  // porownanie dwoch obiektow klasy zwiesz
  237.     cout << zwiesz::ile_zwierzat()<< endl;
  238.     pijes p("Wincent");
  239.     cout << p.naLancuch() << endl;
  240.     p.szczek();
  241.     p.podajLape();
  242.     cout << endl << " \tZadanie 3 " << endl << endl;
  243.     zwiesz &refz = z1;  // utworzenie ref poszczegolnych klas
  244.     pijes &refp = p;
  245.     cout << refz.naLancuch() << endl;  // wykorzystanie ref przy wywolaniu funkcji
  246.     cout << refp.naLancuch() << endl;
  247.     zwiesz *wskz = &z2;   // utworzenie wsk poszczegolnych klas
  248.     pijes *wskp = &p;
  249.     cout << wskz->naLancuch() << endl;  // wykorzystanie wsk przy wywolaniu funkcji
  250.     cout << wskp->naLancuch() << endl;
  251.     cout << endl << " \tZadanie 4 " << endl << endl;
  252.     pijes p1("Charytanowicz");
  253.     pijes p2("Grzegor");
  254.     pijes p3("Hasiura");
  255.     pijes *wskp1 = dynamic_cast<pijes *>(wskp);
  256.     if(wskp1 == nullptr) cout << "Zly typ 1" << endl;
  257.     pijes *wskp2 = dynamic_cast<pijes *>(wskz);
  258.     if(wskp2 == nullptr) cout << "Zly typ 2" << endl;  
  259.     pijes *wskpC = &p1;   // wsk dla tablicy schroniska
  260.     pijes *wskpG = &p2;
  261.     pijes *wskpH = &p3;
  262.     cout << "\tZadanie 5" << endl;
  263.     schronisko_dla_zwierzat schronisko;
  264.     schronisko.daj_do_Schroniska(wskpC,0);   //wrzucenie obiektow psa do schroniska
  265.     schronisko.daj_do_Schroniska(wskpG, 1);  
  266.     schronisko.daj_do_Schroniska(wskpH,2);
  267.     for (int i = 0; i < 3; i++){
  268.         int j=i+1;
  269.         dynamic_cast<pijes *>(schronisko.zabierz_ze_schroniska(i))->jedz(j*10);  
  270.                                                                 // rzutowanie na pijesa      
  271.                                                                 okreslonego wskaznika ze
  272.                                                                  schroniska zeby zjadl
  273.         dynamic_cast<pijes *>(schronisko.zabierz_ze_schroniska(i))->pij(j*10);
  274.         dynamic_cast<pijes *>(schronisko.zabierz_ze_schroniska(i))->spij(j*10);
  275.         dynamic_cast<pijes *>(schronisko.zabierz_ze_schroniska(i))->baw_sie(j*5);
  276.         cout << dynamic_cast<pijes *>(schronisko.zabierz_ze_schroniska(i))->naLancuch()<< endl ;
  277.         dynamic_cast<pijes *>(schronisko.zabierz_ze_schroniska(i))->szczek();
  278.     }
  279.      cout << endl << "\tZadanie 6" << endl;
  280.      kitku k("Franz Kafka");
  281.      funckje_zyciowe &ref = k;   // obiekt klasy kitku przypisany do ref funk_zyciow
  282.      ref.pij(30);
  283.      ref.jedz(20);
  284.      ref.spij(10);
  285.      ref.baw_sie(5);
  286.      cout << dynamic_cast<kitku *>(&ref)->naLancuch() << endl;
  287.         //rzyutowanie na kitku zeby moc wiswietlic odp ref z funkcji zyciowych
  288.      funckje_zyciowe &reff = p;
  289.      reff.pij(20);
  290.      reff.jedz(20);
  291.      reff.spij(20);
  292.      reff.baw_sie(90);
  293.      cout << dynamic_cast<pijes *>(&reff)->naLancuch(dynamic_cast<pijes *>(&reff)->gender) << endl;
  294.      p1 = p2 + p3;  // wykorzystanie przeciazonego + na obiektach klasy pijes
  295.      cout << p2.naLancuch() << endl;
  296.      miska m;
  297.      m(10);
  298.      p2 << m;   // wykorzystanie przeciazonego << zeby mozna bylo nakarmic psa z miski
  299.      cout << p2.naLancuch() << endl;
  300.      cout << *schronisko.zabierz_ze_schroniska(0); // wykorzystanie przeciazonego << zeby moc wyswietlac dane zwierzecia
  301.      czlowiek ktos(20, "Agata");
  302.      ktos.wyswietl(cout);
  303.      ktos.karmpsa(p1, m, 5);
  304.      cout << *schronisko.zabierz_ze_schroniska(0);
  305.     return 0;
  306. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement