Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<typeinfo> // biblioteka do dynamic cast
- using namespace std;
- class zwierze{
- string imie;
- public:
- zwierze( string im){
- imie = im;
- }
- virtual string dajRodzajZwierzecia() const{ // zad 2
- return "Zwierzatko: ";
- }
- const string naLancuch() const
- { // zwraca stala ref
- cout << dajRodzajZwierzecia();
- return imie;
- }
- };
- class pies: public zwierze{
- public:
- pies(string im): zwierze(im){};
- void szczekaj(){
- cout << " Hau szczek szczek hau " << endl;
- }
- void podaj_lape(){
- cout << " Pjesek podal lapke" << endl;
- }
- string dajRodzajZwierzecia() const{
- return "Pies: ";
- }
- };
- class SchroniskoDlaZwierzat{
- zwierze* ilosc_miejsc[100];
- public:
- SchroniskoDlaZwierzat(zwierze* tabwsk[],int rozmiar){
- for (int i = 0; i< rozmiar; i++) ilosc_miejsc[i] = tabwsk[i];
- }
- zwierze* daj_zwierze(int nr){
- return ilosc_miejsc[nr];
- }
- void dodaj_zwierze(zwierze* z, int nr){
- ilosc_miejsc[nr] = z;
- }
- };
- int main()
- {
- zwierze zwierzatko("Ubot");
- pies pjes("Wincent");
- zwierze* tab[5]= {new pies("Ubot"), new pies("Kuba"), new pies("Wincent"), new pies("Luska")};
- SchroniskoDlaZwierzat schronisko(tab,4);
- for(int i = 0; i < 4; i++){
- //cout << dynamic_cast<pies*>(schronisko.daj_zwierze(i)) -> naLancuch() << endl;
- dynamic_cast<pies*>(schronisko.daj_zwierze(i)) -> szczekaj(); // pryiorytet operatorow, najper dynamic a pozniej szczekanie
- pies* p = dynamic_cast<pies*>(schronisko.daj_zwierze(i));
- cout << p -> naLancuch() << endl;
- }
- cout << " Jak nazywa sie pies? " << pjes.naLancuch() << endl;
- pjes.szczekaj();
- pjes.podaj_lape();
- pjes.dajRodzajZwierzecia();
- schronisko.dodaj_zwierze(zwierze* zwierzatko);
- zwierze &refz = zwierzatko; // zad 3
- zwierze &refp = pjes;
- cout << refz.naLancuch() << endl;
- cout << refp.naLancuch() << endl;
- zwierze *wskz = &zwierzatko;
- zwierze *wskp = &pjes;
- pies* wskp2 = dynamic_cast<pies*>(wskp);
- if(wskp2 != NULL)
- cout << wskp2 -> naLancuch() << endl;
- pies* wskp3 = dynamic_cast<pies*>(wskz);
- if(wskp3 != NULL)
- cout << wskp3 -> naLancuch() << endl;
- else
- cout << "nie da rady, nieprawidlowy typ" << endl;
- cout << wskz -> naLancuch() << endl;
- cout << wskp -> naLancuch() << endl;
- pies& refp2 = dynamic_cast<pies&>(refp); // rzutowanie dynamiczne tylko ze ref i wsk
- cout << refp2.naLancuch() << endl; // metody wirtualne, obiekty
- try{
- pies& refp3 = dynamic_cast<pies&>(refz); // refz na pies& i w refp3 jest wynik
- cout << refp3.naLancuch() << endl;
- }
- catch (bad_cast &bc)
- {
- cout << "Nie powiodlo sie, nieprawidlowy typ" << endl;
- cout << bc.what() << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement