Facebook
From Subtle Madrill, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 224
  1. // Kolos2017zad3.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <memory>
  6. #include <iostream>
  7. #include <deque>
  8.  
  9. using namespace std;
  10.  
  11. class PracownikUczelni
  12. {
  13. public:
  14.         PracownikUczelni() { cout << "pracownik przyjęty" << endl; }
  15.         virtual void wykonajPrace() {
  16.                 cout << "pracuje..." << endl;
  17.         }
  18.         virtual ~PracownikUczelni()
  19.         {
  20.                 cout << "pracownik wylany" << endl;
  21.         }
  22. };
  23. class Asystent : public PracownikUczelni
  24. {
  25. public:
  26.         Asystent() { }
  27.         void wykonajPrace()
  28.         {
  29.                 cout << "udaje, że pracuje" << endl;
  30.         }
  31. };
  32. class Naukowiec : public PracownikUczelni
  33. {
  34. public:
  35.         Naukowiec() { }
  36.         void wykonajPrace()
  37.         {
  38.                 for (auto wyrobnik : podlegli_wyrobnicy)
  39.                         wyrobnik->wykonajPrace();
  40.                 if (podlegli_wyrobnicy.size() == 0)
  41.                         throw string("Awaria...");
  42.         }
  43.         deque<shared_ptr<PracownikUczelni>> podlegli_wyrobnicy;
  44. };
  45. class WladzaUczelni : public PracownikUczelni
  46. {
  47. public:
  48.         WladzaUczelni() { }
  49.         ~WladzaUczelni() { cout << "Jeszcze tu wrócę!" << endl; }
  50. };
  51. int main()
  52. {
  53.         {
  54.                 bool lokalny_zakres = true;
  55.                 Naukowiec wyrobnik;
  56.                 if (lokalny_zakres)
  57.                 {
  58.                         shared_ptr<PracownikUczelni> pomniejszy_wyrobnik(new Asystent());
  59.                         shared_ptr<PracownikUczelni> dziekan(new WladzaUczelni());
  60.                         shared_ptr<PracownikUczelni> sekretarka(new WladzaUczelni());
  61.                         wyrobnik.podlegli_wyrobnicy.push_back(pomniejszy_wyrobnik);
  62.                         wyrobnik.podlegli_wyrobnicy.push_back(shared_ptr<Asystent>(new Asystent()));
  63.                         wyrobnik.wykonajPrace();
  64.                 }
  65.                 try {
  66.                         wyrobnik.wykonajPrace();
  67.                         wyrobnik.podlegli_wyrobnicy.clear();
  68.                         wyrobnik.wykonajPrace();
  69.                 }
  70.                 catch (string blad)
  71.                 {
  72.                         std::cout << blad << endl;
  73.                 }
  74.         }
  75. }