Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class funkcjeZyciowe
- {
- public:
- virtual void jedz(int iloscPozywienia) = 0;
- virtual void pij(int iloscWody) = 0;
- virtual void spij(int czas) = 0;
- virtual void bawSie(int czas) = 0;
- };
- class zwierze
- {
- private:
- string mImie;
- static int total;
- protected:
- int glod = 0;
- int pragnienie = 0;
- int humor = 0;
- public:
- zwierze(string imie)
- {
- mImie = imie;
- this->total += 1;
- }
- void ustawImie(string imie)
- {
- mImie = imie;
- }
- string naLancuch()
- {
- const string &referencja_mImie = mImie;
- return referencja_mImie;
- }
- string naLancuch2Zad()
- {
- const string nowe_mImie = dajRodzajZwierzecia() + mImie ;
- return nowe_mImie;
- }
- void naLancuch6Zad()
- {
- cout << "glod: " << glod << "pragnienie: " << pragnienie << "humor: " << humor << endl;
- }
- void ile()
- {
- cout << total << endl << endl;
- }
- string dajRodzajZwierzecia()
- {
- return "Zwierzatko: ";
- }
- virtual void virtualTest()
- {
- cout << "W BAZOWEJ TEST !!!" << endl;
- }
- virtual ~zwierze()
- {
- cout << "Usuwanie zwierze" << endl;
- }
- };
- int zwierze::total = 0;
- class pies: public zwierze, public funkcjeZyciowe // jesli by uzyc private zamiast public to wszystkie public i protect klasy bazowej bylyby private
- {
- public:
- pies(string imie) : zwierze(imie)
- {
- ustawImie(imie);
- }
- void szczekaj()
- {
- cout << "HAU SZCZEK!" << endl;
- }
- void dajLape()
- {
- cout << "'Daje lape'" << endl;
- }
- string dajRodzajZwierzecia()
- {
- return "Pies: ";
- }
- void virtualTest()
- {
- cout << "W POCHODNEJ TEST !!!" << endl;
- }
- virtual void jedz(int iloscPozywienia) // trzeba je bylo przepisac bo wczesniej w funkcjeZyciowe byly virtual
- {
- glod -= iloscPozywienia;
- }
- virtual void pij(int iloscWody)
- {
- pragnienie -= iloscWody;
- }
- virtual void spij(int czas)
- {
- }
- virtual void bawSie(int czas)
- {
- }
- ~pies()
- {
- cout << "Usuwanie pies" << endl;
- }
- };
- class schroniskoDlaZwierzat
- {
- private:
- zwierze *tab[100];
- public:
- void dodajZwierze(zwierze *z, int numer)
- {
- tab[numer] = z;
- }
- zwierze* dajZwierze(int numer)
- {
- return tab[numer];
- }
- void test() // to test do usuniecia
- {
- string napis;
- napis = tab[0]->naLancuch2Zad();
- cout << napis << endl;
- }
- };
- bool porownaj(zwierze zwierze1, zwierze zwierze2)
- {
- string z1 = zwierze1.naLancuch();
- string z2 = zwierze2.naLancuch();
- if(z1 == z2)
- return true;
- return false;
- }
- int main()
- {
- zwierze zwierze1("Szarik");
- zwierze zwierze2("Kitkat");
- zwierze zwierze3("iksde");
- string imie_zwierzecia;
- bool czyTakieSame;
- imie_zwierzecia = zwierze1.naLancuch();
- cout << imie_zwierzecia << endl;
- imie_zwierzecia = zwierze2.naLancuch();
- cout << imie_zwierzecia << endl;
- czyTakieSame = porownaj(zwierze1, zwierze2);
- if(czyTakieSame)
- cout << "Sa takie same" << endl;
- else
- cout << "sa inne" << endl;
- zwierze2.ile();
- // Zadanie 1
- pies tymur1("Tymur");
- tymur1.szczekaj();
- imie_zwierzecia = tymur1.naLancuch();
- cout << imie_zwierzecia << endl;
- tymur1.ile(); // dziedziczone obiekty tez zwiekszaja licznik
- // Zadanie 2
- imie_zwierzecia = tymur1.naLancuch2Zad();
- cout << endl << "Zadanie2: " << endl << imie_zwierzecia << endl << endl; // a wiec tutaj znowu zwierze zamiast pies sie pojawilo
- // Zadanie 3
- pies tymur2("TymurZad3");
- tymur2.virtualTest(); // teraz dopiero z wirtualna metoda w klasie bazowej mozna zrobic metode o takiej
- // samej nazwie w klasie pochodnej, i jej uzywac (a tak to uruchamialaby sie z bazowej)
- zwierze& refZwierzatko = tymur2;
- pies tymur3("Sztuczny tymur do referencji");
- zwierze& refPies = tymur3;
- imie_zwierzecia = refZwierzatko.naLancuch2Zad();
- cout << imie_zwierzecia << endl;
- imie_zwierzecia = refPies.naLancuch2Zad();
- cout << imie_zwierzecia << endl; // CO SIE STANIE JAK UZYJE DESTRUKTORA W PSIE Z VIRTUAL I BEZ?
- // chyba bez roznicy? trzymajcie sie w tym lublinie
- zwierze* wskZwierzatko;
- wskZwierzatko = &zwierze1;
- imie_zwierzecia = wskZwierzatko->naLancuch2Zad();
- cout << imie_zwierzecia << endl << endl;
- // Zadanie 4
- // dynamic cast rzutuje wskaznik/referencji w dol hierarchii dziedziczenia (pochodna)
- cout << "Zadanie 4" << endl;
- pies* wskPies2 = &tymur3;
- pies& refPies3 = tymur2;
- zwierze *bozeKolejnywskaznik = dynamic_cast<zwierze*>(wskPies2);
- zwierze &refDoReferencji = dynamic_cast<zwierze&>(refPies3); // teraz to jest pochodna zwierze
- imie_zwierzecia = bozeKolejnywskaznik->naLancuch2Zad();
- cout << imie_zwierzecia << endl;
- imie_zwierzecia = refDoReferencji.naLancuch2Zad();
- cout << imie_zwierzecia << endl;
- //Zadanie 5
- cout << endl << "Zadanie 5" << endl;
- schroniskoDlaZwierzat schronisko;
- pies piesPom1("pierwszy");
- pies *pies1 = &piesPom1;
- schronisko.dodajZwierze(pies1, 0);
- dynamic_cast<pies*>(schronisko.dajZwierze(0))->szczekaj();
- schronisko.test(); // do usuniecia
- cout << endl;
- //Zadanie 6
- cout << "Zadanie 6" << endl;
- tymur1.naLancuch6Zad();
- tymur1.jedz(3);
- tymur1.naLancuch6Zad();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement