Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.09 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class funkcjeZyciowe
  5. {
  6.     public:
  7.         virtual void jedz(int iloscPozywienia) = 0;
  8.         virtual void pij(int iloscWody) = 0;
  9.         virtual void spij(int czas) = 0;
  10.         virtual void bawSie(int czas) = 0;
  11.  
  12.  
  13. };
  14.  
  15. class zwierze
  16. {
  17.     private:
  18.         string mImie;
  19.         static int total;
  20.     protected:
  21.         int glod = 0;
  22.         int pragnienie = 0;
  23.         int humor = 0;
  24.     public:
  25.         zwierze(string imie)
  26.         {
  27.             mImie = imie;
  28.             this->total += 1;
  29.         }
  30.  
  31.         void ustawImie(string imie)
  32.         {
  33.             mImie = imie;
  34.         }
  35.  
  36.         string naLancuch()
  37.         {
  38.             const string &referencja_mImie = mImie;
  39.             return referencja_mImie;
  40.         }
  41.  
  42.         string naLancuch2Zad()
  43.         {
  44.             const string nowe_mImie = dajRodzajZwierzecia() + mImie ;
  45.             return nowe_mImie;
  46.         }
  47.  
  48.         void naLancuch6Zad()
  49.         {
  50.             cout << "glod: " << glod << "pragnienie: " << pragnienie << "humor: " << humor << endl;
  51.         }
  52.  
  53.         void ile()
  54.         {
  55.             cout << total << endl << endl;
  56.         }
  57.  
  58.         string dajRodzajZwierzecia()
  59.         {
  60.             return "Zwierzatko: ";
  61.         }
  62.  
  63.         virtual void virtualTest()
  64.         {
  65.             cout << "W BAZOWEJ TEST !!!" << endl;
  66.         }
  67.  
  68.         virtual ~zwierze()
  69.         {
  70.            cout << "Usuwanie zwierze" << endl;
  71.         }
  72. };
  73.  
  74. int zwierze::total = 0;
  75.  
  76. class pies: public zwierze, public funkcjeZyciowe // jesli by uzyc private zamiast public to wszystkie public i protect klasy bazowej bylyby private
  77. {
  78.     public:
  79.         pies(string imie) : zwierze(imie)
  80.         {
  81.             ustawImie(imie);
  82.         }
  83.  
  84.         void szczekaj()
  85.         {
  86.             cout << "HAU SZCZEK!" << endl;
  87.         }
  88.  
  89.         void dajLape()
  90.         {
  91.             cout << "'Daje lape'" << endl;
  92.         }
  93.  
  94.         string dajRodzajZwierzecia()
  95.         {
  96.             return "Pies: ";
  97.         }
  98.  
  99.         void virtualTest()
  100.         {
  101.             cout << "W POCHODNEJ TEST !!!" << endl;
  102.         }
  103.  
  104.         virtual void jedz(int iloscPozywienia) // trzeba je bylo przepisac bo wczesniej w funkcjeZyciowe byly virtual
  105.         {
  106.             glod -= iloscPozywienia;
  107.         }
  108.         virtual void pij(int iloscWody)
  109.         {
  110.             pragnienie -= iloscWody;
  111.         }
  112.         virtual void spij(int czas)
  113.         {
  114.            
  115.         }
  116.         virtual void bawSie(int czas)
  117.         {
  118.  
  119.         }
  120.  
  121.         ~pies()
  122.         {
  123.             cout << "Usuwanie pies" << endl;
  124.         }
  125. };
  126.  
  127. class schroniskoDlaZwierzat
  128. {
  129.     private:
  130.         zwierze *tab[100];
  131.     public:
  132.         void dodajZwierze(zwierze *z, int numer)
  133.         {
  134.             tab[numer] = z;
  135.         }
  136.         zwierze* dajZwierze(int numer)
  137.         {
  138.             return tab[numer];
  139.         }
  140.         void test() // to test do usuniecia
  141.         {
  142.             string napis;
  143.             napis = tab[0]->naLancuch2Zad();
  144.             cout << napis << endl;
  145.         }
  146.  
  147. };
  148.  
  149. bool porownaj(zwierze zwierze1, zwierze zwierze2)
  150. {
  151.     string z1 = zwierze1.naLancuch();
  152.     string z2 = zwierze2.naLancuch();
  153.     if(z1 == z2)
  154.         return true;
  155.     return false;
  156. }
  157.  
  158. int main()
  159. {
  160.     zwierze zwierze1("Szarik");
  161.     zwierze zwierze2("Kitkat");
  162.     zwierze zwierze3("iksde");
  163.     string imie_zwierzecia;
  164.     bool czyTakieSame;
  165.     imie_zwierzecia = zwierze1.naLancuch();
  166.     cout << imie_zwierzecia << endl;
  167.     imie_zwierzecia = zwierze2.naLancuch();
  168.     cout << imie_zwierzecia << endl;
  169.     czyTakieSame = porownaj(zwierze1, zwierze2);
  170.     if(czyTakieSame)
  171.         cout << "Sa takie same" << endl;
  172.     else
  173.         cout << "sa inne" << endl;
  174.     zwierze2.ile();
  175.  
  176.     // Zadanie 1
  177.     pies tymur1("Tymur");
  178.     tymur1.szczekaj();
  179.     imie_zwierzecia = tymur1.naLancuch();
  180.     cout << imie_zwierzecia << endl;
  181.     tymur1.ile();  // dziedziczone obiekty tez zwiekszaja licznik
  182.  
  183.     // Zadanie 2
  184.     imie_zwierzecia = tymur1.naLancuch2Zad();
  185.     cout << endl << "Zadanie2: " << endl << imie_zwierzecia << endl << endl; // a wiec tutaj znowu zwierze zamiast pies sie pojawilo
  186.  
  187.     // Zadanie 3
  188.     pies tymur2("TymurZad3");
  189.     tymur2.virtualTest(); // teraz dopiero z wirtualna metoda w klasie bazowej mozna zrobic metode o takiej
  190.                           // samej nazwie w klasie pochodnej, i jej uzywac (a tak to uruchamialaby sie z bazowej)
  191.     zwierze& refZwierzatko = tymur2;
  192.     pies tymur3("Sztuczny tymur do referencji");
  193.     zwierze& refPies = tymur3;
  194.     imie_zwierzecia = refZwierzatko.naLancuch2Zad();
  195.     cout << imie_zwierzecia << endl;
  196.     imie_zwierzecia = refPies.naLancuch2Zad();
  197.     cout << imie_zwierzecia << endl; // CO SIE STANIE JAK UZYJE DESTRUKTORA W PSIE Z VIRTUAL I BEZ?
  198.                                      // chyba bez roznicy? trzymajcie sie w tym lublinie
  199.     zwierze* wskZwierzatko;
  200.     wskZwierzatko = &zwierze1;
  201.     imie_zwierzecia = wskZwierzatko->naLancuch2Zad();
  202.     cout << imie_zwierzecia << endl << endl;
  203.  
  204.     // Zadanie 4
  205.     // dynamic cast rzutuje wskaznik/referencji w dol hierarchii dziedziczenia (pochodna)
  206.     cout << "Zadanie 4" << endl;
  207.     pies* wskPies2 = &tymur3;
  208.     pies& refPies3 = tymur2;
  209.     zwierze *bozeKolejnywskaznik = dynamic_cast<zwierze*>(wskPies2);
  210.     zwierze &refDoReferencji =  dynamic_cast<zwierze&>(refPies3);  // teraz to jest pochodna zwierze
  211.     imie_zwierzecia = bozeKolejnywskaznik->naLancuch2Zad();
  212.     cout << imie_zwierzecia << endl;
  213.     imie_zwierzecia = refDoReferencji.naLancuch2Zad();
  214.     cout << imie_zwierzecia << endl;
  215.  
  216.     //Zadanie 5
  217.     cout << endl << "Zadanie 5" << endl;
  218.     schroniskoDlaZwierzat schronisko;
  219.     pies piesPom1("pierwszy");
  220.     pies *pies1 =  &piesPom1;
  221.     schronisko.dodajZwierze(pies1, 0);
  222.     dynamic_cast<pies*>(schronisko.dajZwierze(0))->szczekaj();
  223.     schronisko.test(); // do usuniecia
  224.     cout << endl;
  225.  
  226.     //Zadanie 6
  227.     cout << "Zadanie 6" << endl;
  228.     tymur1.naLancuch6Zad();
  229.     tymur1.jedz(3);
  230.     tymur1.naLancuch6Zad();
  231.     return 0;
  232. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement