Untitled
raw download clone
CPP
views 27
,
size 6349 b
#include <iostream>
#include <ios>
#include <iomanip>
#include <typeinfo>
using namespace std;

class Zwierze
{
    string mImie;
    static int licznik;
public:
    Zwierze(string imie)
    {
        licznik++;
        mImie = imie;
    }
    void ustawImie(string mImie)
    {
        this->mImie = mImie;
    }
    virtual string dajRodzajZwierzecia() const
    {
        return "Zwierzatko: ";
    }
    const string naLancuch()
    {
        //cout << mImie << endl;
        cout << "Glod: " << glod << endl;
        cout << "Pragnienie: " << pragnienie << endl;
        cout << "Zmeczenie:" << zmeczenie << endl;
        cout << "Humor: " << humor << endl;
        return dajRodzajZwierzecia()+mImie;
    }
    static int ileZwierzat()
    {
        return licznik;
    }
protected:
    float glod=0;
    float pragnienie=0;
    float zmeczenie=0;
    float humor=0;
};

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 Kot: public Zwierze, public FunkcjeZyciowe
{
    public:
        Kot(string imie) : Zwierze(imie)
        {

        }
        void miaucz()
        {
            cout<<"miau miau" <<endl;
        }
        void myjSie()
        {
            cout<<"Myju Myju" << endl;
        }
        string dajRodzajZwierzecia() const
        {
            return "Kot: ";
        }
        virtual void jedz(int iloscpozywienia)
        {
            glod=glod-iloscpozywienia;
        }
        virtual void pij(int iloscwody)
        {
            pragnienie = pragnienie-iloscwody;
        }
        virtual void spij(int czas)
        {
            zmeczenie = zmeczenie-czas;
        }
        virtual void bawSie(int czas)
        {
            glod = glod+czas/2;
            pragnienie = pragnienie+czas/2;
            zmeczenie = zmeczenie+czas/2;
            humor = humor+czas;
        }


};

class Pies: public Zwierze, public FunkcjeZyciowe
{
    public:
        Pies(string imie) : Zwierze(imie)
        {

        }
        void szczekaj()
        {
            cout<<"hau hau" <<endl;
        }
        void dajLape()
        {
            cout<<"Podaj lape" << endl;
        }
        string dajRodzajZwierzecia() const
        {
            return "Pies: ";
        }
        virtual void jedz(int iloscpozywienia)
        {
            glod=glod-iloscpozywienia;
        }
        virtual void pij(int iloscwody)
        {
            pragnienie = pragnienie-iloscwody;
        }
        virtual void spij(int czas)
        {
            zmeczenie = zmeczenie-czas;
        }
        virtual void bawSie(int czas)
        {
            glod = glod+czas/2;
            pragnienie = pragnienie+czas/2;
            zmeczenie = zmeczenie+czas/2;
            humor = humor+czas;
        }

};

class SchroniskoDlaZwierzat
{
    Zwierze* mZwierzeta[100];

    public:
        void zabierzDoSchroniska(Zwierze* z, int numer)
        {
            mZwierzeta[numer] = z;
        }

        Zwierze* przygarnijZwierze(int numer)
        {
            return mZwierzeta[numer];
        }

        SchroniskoDlaZwierzat(Zwierze* zwierzeta[],int liczba)
        {
            for(int i=0;i<liczba;i++)
            {
                mZwierzeta[i]=zwierzeta[i];
            }
        }
};


int Zwierze::licznik=0;

int main()
{
    /*Zwierze z("Janusz");
    Zwierze& refZwierzatko=z;
    Pies p("Reksio");
    Zwierze& refPies=p;
    Zwierze* wskZwierze = &z;
    Zwierze* wskPies;
    wskPies=&p;
    cout<<wskZwierze->naLancuch()<<endl;
    cout<<wskPies->naLancuch()<<endl;
    cout<<refZwierzatko.naLancuch()<<endl;
    cout<<refPies.naLancuch()<<endl;

    Pies* wskPies2=dynamic_cast<Pies*>(wskPies);
    Pies* wskPies3=dynamic_cast<Pies*>(wskZwierze);
    if(wskPies2 != NULL)
        cout<<wskPies2->naLancuch()<<endl;
    else
        cout<<"Niepoprawny typ"<<endl;
    if(wskPies3!=NULL)
        cout<<wskPies3->naLancuch()<<endl;
    else
        cout<<"Niepoprawny typ"<<endl;

    Pies& refPies2 = dynamic_cast<Pies&>(refPies);
    cout<<refPies2.naLancuch()<<endl;

    try
    {
        Pies& refPies3 = dynamic_cast<Pies&>(refZwierze);
        cout<<refPies3.naLancuch()<<endl;
    }
    catch (bad_cast &bc)
    {
        cout<<"Niepoprawny typ"<<endl;
        cout<<bc.what()<<endl;
    }
    p.szczekaj();
    p.dajLape();

    Zwierze* tab[4] = {new Pies("Azor"), new Pies("Reksio"), new Pies("Burek"), new Pies("Maks")};
    SchroniskoDlaZwierzat schronisko(tab,4);
    Zwierze* z = new Pies("Brutal");
    schronisko.zabierzDoSchroniska(z,4);
    for(int i=0;i<5;i++)
    {
        dynamic_cast<Pies*>(schronisko.przygarnijZwierze(i))->szczekaj();
        cout << "Imie psa: " << schronisko.przygarnijZwierze(i) -> naLancuch() << endl;
    }*/

    Pies pies("Piesek");
    cout << pies.naLancuch() << endl;
    cout << "------------------------------------------------------------------------------------" << endl;
    pies.szczekaj();
    pies.dajLape();
    pies.jedz(1);
    pies.pij(1);
    pies.spij(1);
    pies.bawSie(1);
    cout << "------------------------------------------------------------------------------------" << endl;
    cout << pies.naLancuch() << endl;
    Kot kot("Kotek");
    cout << "------------------------------------------------------------------------------------" << endl;
    FunkcjeZyciowe& funkcje = kot;
    dynamic_cast<Kot&>(funkcje).miaucz();
    dynamic_cast<Kot&>(funkcje).myjSie();
    funkcje.jedz(1);
    funkcje.pij(1);
    funkcje.spij(1);
    funkcje.bawSie(1);
    cout << dynamic_cast<Kot&>(funkcje).naLancuch() << endl;
    cout << "------------------------------------------------------------------------------------" << endl;
    FunkcjeZyciowe& funkcje1 = pies;
    dynamic_cast<Pies&>(funkcje1).szczekaj();
    dynamic_cast<Pies&>(funkcje1).dajLape();
    funkcje1.jedz(1);
    funkcje1.pij(1);
    funkcje1.spij(1);
    funkcje1.bawSie(1);
    cout << dynamic_cast<Pies&>(funkcje1).naLancuch() << endl;
    //FunkcjeZyciowe funkcje2;
    return 0;
}
close fullscreen
Login or Register to edit or fork this paste. It's free.