Advertisement
Paszta

Obiektówka - dziedziczenie

Nov 6th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.84 KB | None | 0 0
  1. #include <iostream>
  2. #include<typeinfo>  // biblioteka do dynamic cast
  3.  
  4. using namespace std;
  5.  
  6. class zwierze{
  7.  
  8.     string imie;
  9.  
  10.  public:
  11.     zwierze( string im){
  12.         imie = im;
  13.     }
  14.    virtual string dajRodzajZwierzecia() const{  // zad 2
  15.         return "Zwierzatko: ";
  16.     }
  17.     const string naLancuch() const
  18.     {  // zwraca stala ref
  19.         cout << dajRodzajZwierzecia();
  20.         return imie;
  21.     }
  22.     };
  23.  
  24. class pies: public zwierze{
  25.  
  26. public:
  27.     pies(string im): zwierze(im){};
  28.  
  29.     void szczekaj(){
  30.         cout << " Hau szczek szczek hau " << endl;
  31.     }
  32.     void podaj_lape(){
  33.         cout << " Pjesek podal lapke" << endl;
  34.     }
  35.     string dajRodzajZwierzecia() const{
  36.         return "Pies: ";
  37.     }
  38. };
  39.  
  40. class SchroniskoDlaZwierzat{
  41.  
  42.     zwierze* ilosc_miejsc[100];
  43.  
  44.   public:
  45.     SchroniskoDlaZwierzat(zwierze* tabwsk[],int rozmiar){
  46.         for (int i = 0; i< rozmiar; i++) ilosc_miejsc[i] = tabwsk[i];
  47.     }
  48.  
  49.     zwierze* daj_zwierze(int nr){
  50.        return ilosc_miejsc[nr];
  51.     }
  52.  
  53.     void dodaj_zwierze(zwierze* z, int nr){
  54.         ilosc_miejsc[nr] = z;
  55.  
  56.     }
  57.  
  58.  
  59. };
  60.  
  61. int main()
  62. {
  63.    zwierze zwierzatko("Ubot");
  64.    pies pjes("Wincent");
  65.    zwierze* tab[5]= {new pies("Ubot"), new pies("Kuba"), new pies("Wincent"), new pies("Luska")};
  66.    SchroniskoDlaZwierzat schronisko(tab,4);
  67.  
  68.    for(int i = 0; i < 4; i++){
  69.        //cout << dynamic_cast<pies*>(schronisko.daj_zwierze(i)) -> naLancuch() << endl;
  70.        dynamic_cast<pies*>(schronisko.daj_zwierze(i)) -> szczekaj();  // pryiorytet operatorow, najper dynamic a pozniej szczekanie
  71.         pies* p = dynamic_cast<pies*>(schronisko.daj_zwierze(i));
  72.         cout  << p -> naLancuch() << endl;
  73.    }
  74.   cout << " Jak nazywa sie pies? " << pjes.naLancuch() << endl;
  75. pjes.szczekaj();
  76. pjes.podaj_lape();
  77. pjes.dajRodzajZwierzecia();
  78.  
  79. schronisko.dodaj_zwierze(zwierze* zwierzatko);
  80.  
  81. zwierze &refz = zwierzatko;             // zad 3
  82. zwierze &refp = pjes;
  83.  
  84. cout << refz.naLancuch() << endl;
  85. cout << refp.naLancuch() << endl;
  86.  
  87. zwierze *wskz = &zwierzatko;
  88. zwierze *wskp = &pjes;
  89.  
  90. pies* wskp2 = dynamic_cast<pies*>(wskp);
  91. if(wskp2 != NULL)
  92.     cout << wskp2 -> naLancuch() << endl;
  93.  
  94. pies* wskp3 = dynamic_cast<pies*>(wskz);
  95. if(wskp3 != NULL)
  96.     cout << wskp3 -> naLancuch() << endl;
  97. else
  98.     cout << "nie da rady, nieprawidlowy typ" << endl;
  99.  
  100. cout << wskz -> naLancuch() << endl;
  101. cout << wskp -> naLancuch() << endl;
  102.  
  103.  
  104. pies& refp2 = dynamic_cast<pies&>(refp);   // rzutowanie dynamiczne tylko ze ref i wsk
  105. cout << refp2.naLancuch() << endl;          // metody wirtualne, obiekty
  106. try{
  107.     pies& refp3 = dynamic_cast<pies&>(refz); // refz na pies& i w refp3 jest wynik
  108.     cout << refp3.naLancuch() << endl;
  109. }
  110. catch (bad_cast &bc)
  111. {
  112.    cout << "Nie powiodlo sie, nieprawidlowy typ" << endl;
  113.    cout << bc.what() << endl;
  114. }
  115.  
  116.  
  117.     return 0;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement