1
0

workermi.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // workermi.h -- working classes with MI
  2. #ifndef WORKERMI_H_
  3. #define WORKERMI_H_
  4. #include <string>
  5. class Worker // an abstract base class
  6. {
  7. private:
  8. std::string fullname;
  9. long id;
  10. protected:
  11. virtual void Data() const;
  12. virtual void Get();
  13. public:
  14. Worker() : fullname("no one"), id(0L) {}
  15. Worker(const std::string & s, long n)
  16. : fullname(s), id(n) {}
  17. virtual ~Worker() = 0; // pure virtual function
  18. virtual void Set() = 0;
  19. virtual void Show() const = 0;
  20. };
  21. class Waiter : virtual public Worker
  22. {
  23. private:
  24. int panache;
  25. protected:
  26. void Data() const;
  27. void Get();
  28. public:
  29. Waiter() : Worker(), panache(0) {}
  30. Waiter(const std::string & s, long n, int p = 0)
  31. : Worker(s, n), panache(p) {}
  32. Waiter(const Worker & wk, int p = 0)
  33. : Worker(wk), panache(p) {}
  34. void Set();
  35. void Show() const;
  36. };
  37. class Singer : virtual public Worker
  38. {
  39. protected:
  40. enum {other, alto, contralto, soprano,
  41. bass, baritone, tenor};
  42. enum {Vtypes = 7};
  43. void Data() const;
  44. void Get();
  45. private:
  46. static char *pv[Vtypes]; // string equivs of voice types
  47. int voice;
  48. public:
  49. Singer() : Worker(), voice(other) {}
  50. Singer(const std::string & s, long n, int v = other)
  51. : Worker(s, n), voice(v) {}
  52. Singer(const Worker & wk, int v = other)
  53. : Worker(wk), voice(v) {}
  54. void Set();
  55. void Show() const;
  56. };
  57. // multiple inheritance
  58. class SingingWaiter : public Singer, public Waiter
  59. {
  60. protected:
  61. void Data() const;
  62. void Get();
  63. public:
  64. SingingWaiter() {}
  65. SingingWaiter(const std::string & s, long n, int p = 0,
  66. int v = other)
  67. : Worker(s,n), Waiter(s, n, p), Singer(s, n, v) {}
  68. SingingWaiter(const Worker & wk, int p = 0, int v = other)
  69. : Worker(wk), Waiter(wk,p), Singer(wk,v) {}
  70. SingingWaiter(const Waiter & wt, int v = other)
  71. : Worker(wt),Waiter(wt), Singer(wt,v) {}
  72. SingingWaiter(const Singer & wt, int p = 0)
  73. : Worker(wt),Waiter(wt,p), Singer(wt) {}
  74. void Set();
  75. void Show() const;
  76. };
  77. #endif