Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <sstream>
- #include<time.h>
- #include<assert.h>
- #include<cassert>
- using namespace std;
- class zwiesz{
- string imie;
- static int licznik; // pole statyczne dla calej klasy, wartosc ustawiana poza klasa
- protected:
- int glod =0;
- int pragnienie =0;
- int zmeczenie=0;
- int humor=0;
- public:
- zwiesz(string imie) // konstruktor klasy zwiesz
- {
- this->imie=imie;
- licznik++;
- }
- void ustaw_imie(string imie){
- this->imie=imie;
- }
- const string naLancuch(){ //metida zwracajaca stala referencje
- stringstream ss;
- ss << dajzwierza() << imie << endl << "Glod: " << glod << endl << "Pragnienie: " << pragnienie << endl << "Zmeczenie: " << zmeczenie << endl << "Humor: " << humor << endl;
- return ss.str();
- }
- const string naLancuch(int gender){ // drugi na lancuch wyswietlajacy tez plec
- stringstream ss;
- ss << dajzwierza() << ((gender == 0)?"Pan Pies ":"Pani Pies ") << imie << endl << "Glod: " << glod << endl << "Pragnienie: " << pragnienie << endl << "Zmeczenie: " << zmeczenie << endl << "Humor: " << humor << endl;
- return ss.str();
- // zawiera skrocony if -----> (warunek) ? co jeśli spelniony : co jesli nie spelniony
- }
- static int ile_zwierzat(){ //metoda statyczna
- return licznik;
- }
- virtual const string dajzwierza() // metoda wirtualna
- {
- return "Zwierz : ";
- }
- friend ostream & operator<< (ostream & strumien, zwiesz &zw); // deklaracja przyjazni
- };
- ostream & operator<< (ostream & strumien, zwiesz &zw){
- strumien << zw.dajzwierza() << zw.imie << endl << "Glod: " << zw.glod << endl << "Pragnienie: " << zw.pragnienie << endl << "Zmeczenie: " << zw.zmeczenie << endl << "Humor: " << zw.humor << endl;
- return strumien; // funkcja korzystajaca z klasy zwiesz nie bedaca jej metoda
- }
- class funckje_zyciowe{ // klasa abstrakcyjna
- public:
- virtual void jedz(int ilosc_jedzenia)=0;
- virtual void pij(int ilosc_wody)=0; // czyste metody wirtualne musza byc
- wyzerowane
- virtual void spij(int czas)=0;
- virtual void baw_sie(int czas)=0;
- };
- class miska
- {
- int porcje;
- public:
- miska operator()(int porcja)
- {
- porcje=porcja;
- return *this;
- }
- int dajporcje()
- {
- return porcje;
- }
- };
- class pijes : public zwiesz, public funckje_zyciowe // wielodziedziczenie publiczne
- {
- friend class czlowiek;
- void jedz(miska &m, int ilosc)
- {
- m(ilosc);
- glod -= m.dajporcje();
- m(0);
- }
- public:
- enum plec{Pan_pies ,Pani_pies}; // dekl typu wyliczeniowego
- plec gender=static_cast<plec>(/*rand()%2*/1); // losowe wybieranie plci
- pijes(string imie) : zwiesz(imie){} // klasa pijes korzysta z konstruktora klasy
- zwiesz
- void szczek()
- {
- cout << "Hau hau hau" << endl;
- }
- void podajLape()
- {
- cout << "Pies podal lape" << endl;
- }
- const string dajzwierza()
- {
- return "Pies : ";
- }
- void jedz(int ilosc_jedzenia)
- {
- glod-=ilosc_jedzenia;
- }
- void pij(int ilosc_wody)
- {
- pragnienie -= ilosc_wody;
- }
- void spij(int czas)
- {
- zmeczenie -= czas;
- }
- void baw_sie(int czas)
- {
- glod += czas;
- pragnienie += czas;
- zmeczenie += czas;
- humor += czas;
- }
- pijes operator+(pijes &p) // przeciazenie + zeby assert mogl sprawdzac plec psow
- {
- assert(gender /*!=*/ == p.gender); // pierwszy gender to dla ktorego wywolujemy a p.gender to dla ktorego przesylamy do funkcji
- pijes bombelek("Purchlak");
- return bombelek; //funkcja typu pijes bo zwraca obiekt tego typu
- }
- void operator<<(miska &m) // przeciazenie << zeby mozna bylo psa nakarmic z klasy miska
- {
- glod -= m.dajporcje();
- m(0);
- }
- };
- class kitku : public zwiesz, public funckje_zyciowe
- {
- public:
- kitku(string imie) : zwiesz(imie){}
- void miaumiau()
- {
- cout << "miau miau miau" << endl;
- }
- void myjsie()
- {
- cout << "Myju myju" << endl;
- }
- const string dajzwierza()
- {
- return "Kot : ";
- }
- void jedz(int ilosc_jedzenia)
- {
- glod-=ilosc_jedzenia;
- }
- void pij(int ilosc_wody)
- {
- pragnienie -= ilosc_wody;
- }
- void spij(int czas)
- {
- zmeczenie -= czas;
- }
- void baw_sie(int czas)
- {
- glod += czas;
- pragnienie += czas;
- zmeczenie += czas;
- humor += czas;
- }
- };
- class schronisko_dla_zwierzat
- {
- zwiesz *tab[100]; // tablica wsk
- public:
- void daj_do_Schroniska(zwiesz *gomez, int numer)
- {
- tab[numer]=gomez; // ustawienie obiektow na poszczegolnych miejscach tablicy
- }
- zwiesz *zabierz_ze_schroniska(int numer) // typ zwiesz bo ma zwrocic element typu
- zwiesz
- {
- return tab[numer];
- }
- };
- class czlowiek
- {
- enum plec{kobieta, mezczyzna};
- string imie;
- int wiek;
- plec gender;
- public:
- czlowiek(int wiek, string imie)
- {
- gender=static_cast<plec>(rand()%2);
- this->wiek=wiek;
- this->imie=imie;
- }
- const void wyswietl(ostream& ss){
- ss << ((gender == 0)?"Pan ":"Pani ") << imie << endl << "Wiek "<< wiek << endl << endl;
- }
- void karmpsa(pijes &p, miska &m, int ilosc) // funkcja wykorzystujaca dwie klasy
- {
- p.jedz(m, ilosc);
- }
- };
- int zwiesz::licznik = 0; // ustawienie wartosci pola statycznego w klasie zwiesz
- bool porownaj(zwiesz z1, zwiesz z2){
- if(z1.naLancuch() == z2.naLancuch()) return true;
- else return false;
- }
- int main()
- {
- srand(time(NULL));
- zwiesz z1("Henryczek");
- zwiesz z2("Tadzio");
- cout << z1.naLancuch() << endl;
- cout << z2.naLancuch() << endl;
- z2.ustaw_imie("Stasio");
- cout << z2.naLancuch() << endl;
- cout << porownaj(z1, z2)<< endl; // porownanie dwoch obiektow klasy zwiesz
- cout << zwiesz::ile_zwierzat()<< endl;
- pijes p("Wincent");
- cout << p.naLancuch() << endl;
- p.szczek();
- p.podajLape();
- cout << endl << " \tZadanie 3 " << endl << endl;
- zwiesz &refz = z1; // utworzenie ref poszczegolnych klas
- pijes &refp = p;
- cout << refz.naLancuch() << endl; // wykorzystanie ref przy wywolaniu funkcji
- cout << refp.naLancuch() << endl;
- zwiesz *wskz = &z2; // utworzenie wsk poszczegolnych klas
- pijes *wskp = &p;
- cout << wskz->naLancuch() << endl; // wykorzystanie wsk przy wywolaniu funkcji
- cout << wskp->naLancuch() << endl;
- cout << endl << " \tZadanie 4 " << endl << endl;
- pijes p1("Charytanowicz");
- pijes p2("Grzegor");
- pijes p3("Hasiura");
- pijes *wskp1 = dynamic_cast<pijes *>(wskp);
- if(wskp1 == nullptr) cout << "Zly typ 1" << endl;
- pijes *wskp2 = dynamic_cast<pijes *>(wskz);
- if(wskp2 == nullptr) cout << "Zly typ 2" << endl;
- pijes *wskpC = &p1; // wsk dla tablicy schroniska
- pijes *wskpG = &p2;
- pijes *wskpH = &p3;
- cout << "\tZadanie 5" << endl;
- schronisko_dla_zwierzat schronisko;
- schronisko.daj_do_Schroniska(wskpC,0); //wrzucenie obiektow psa do schroniska
- schronisko.daj_do_Schroniska(wskpG, 1);
- schronisko.daj_do_Schroniska(wskpH,2);
- for (int i = 0; i < 3; i++){
- int j=i+1;
- dynamic_cast<pijes *>(schronisko.zabierz_ze_schroniska(i))->jedz(j*10);
- // rzutowanie na pijesa
- okreslonego wskaznika ze
- schroniska zeby zjadl
- dynamic_cast<pijes *>(schronisko.zabierz_ze_schroniska(i))->pij(j*10);
- dynamic_cast<pijes *>(schronisko.zabierz_ze_schroniska(i))->spij(j*10);
- dynamic_cast<pijes *>(schronisko.zabierz_ze_schroniska(i))->baw_sie(j*5);
- cout << dynamic_cast<pijes *>(schronisko.zabierz_ze_schroniska(i))->naLancuch()<< endl ;
- dynamic_cast<pijes *>(schronisko.zabierz_ze_schroniska(i))->szczek();
- }
- cout << endl << "\tZadanie 6" << endl;
- kitku k("Franz Kafka");
- funckje_zyciowe &ref = k; // obiekt klasy kitku przypisany do ref funk_zyciow
- ref.pij(30);
- ref.jedz(20);
- ref.spij(10);
- ref.baw_sie(5);
- cout << dynamic_cast<kitku *>(&ref)->naLancuch() << endl;
- //rzyutowanie na kitku zeby moc wiswietlic odp ref z funkcji zyciowych
- funckje_zyciowe &reff = p;
- reff.pij(20);
- reff.jedz(20);
- reff.spij(20);
- reff.baw_sie(90);
- cout << dynamic_cast<pijes *>(&reff)->naLancuch(dynamic_cast<pijes *>(&reff)->gender) << endl;
- p1 = p2 + p3; // wykorzystanie przeciazonego + na obiektach klasy pijes
- cout << p2.naLancuch() << endl;
- miska m;
- m(10);
- p2 << m; // wykorzystanie przeciazonego << zeby mozna bylo nakarmic psa z miski
- cout << p2.naLancuch() << endl;
- cout << *schronisko.zabierz_ze_schroniska(0); // wykorzystanie przeciazonego << zeby moc wyswietlac dane zwierzecia
- czlowiek ktos(20, "Agata");
- ktos.wyswietl(cout);
- ktos.karmpsa(p1, m, 5);
- cout << *schronisko.zabierz_ze_schroniska(0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement