Advertisement
35657

Untitled

Jul 12th, 2023
1,092
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.70 KB | None | 0 0
  1. #include <set>
  2. #include <string>
  3. #include <iostream>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8.  
  9. // Человек
  10. class Person {
  11. public:
  12.  
  13.     Person() : Person("Ivan", 20, "man") {} // делегирование конструкторов
  14.  
  15.     Person(string name, int age, string gender) : name_(name), age_(age), gender_(gender) {
  16.         cout << "Конструктор Person" << endl;
  17.     };
  18.  
  19.     string GetName() const {
  20.         return name_;
  21.     }
  22.     int GetAge() const {
  23.         return age_;
  24.     }
  25.     string GetGender() const {
  26.         return gender_;
  27.     }
  28.  
  29. private:
  30.     string name_;
  31.     int age_;
  32.     string gender_;
  33. };
  34.  
  35.  
  36.  
  37. // Рабочий.Владеет несколькими специальностями
  38. class Worker : public Person {
  39. public:
  40.  
  41.     Worker(){}
  42.  
  43.     Worker(string name, int age, string gender) : Person(name, age, gender) {
  44.         cout << "Конструктор Worker" << endl;
  45.     };
  46.  
  47.     void AddSpeciality(string speciality) {
  48.         specialities_.insert(speciality);
  49.     }
  50.     bool HasSpeciality(string speciality) const {
  51.         return specialities_.count(speciality);
  52.     }
  53.  
  54.     virtual string Work() = 0;
  55.  
  56. private:
  57.     set<string> specialities_;
  58. };
  59.  
  60. class Painter : public Worker {
  61. public:
  62.     Painter(string name, int age, string gender) : Worker(name, age, gender) {
  63.         cout << "Конструктор Painter" << endl;
  64.     };
  65.  
  66.     string Work() {
  67.         return "Я крашу";
  68.     }
  69. };
  70.  
  71. class Driver : public Worker {
  72. public:
  73.     Driver(string name, int age, string gender) : Worker(name, age, gender) {
  74.         cout << "Конструктор Driver" << endl;
  75.     };
  76.  
  77.     string Work() {
  78.         return "Я везу";
  79.     }
  80. };
  81.  
  82. class Builder : public Worker {
  83. public:
  84.  
  85.     Builder(string name, int age, string gender) : Worker(name, age, gender) {
  86.         cout << "Конструктор Builder" << endl;
  87.     };
  88.  
  89.     string Work() {
  90.         return "Я строю";
  91.     }
  92. };
  93.  
  94.  
  95. void Print(Worker& wk) {
  96.     cout << wk.Work() << endl;
  97. }
  98.  
  99. int main() {
  100.     setlocale(LC_ALL, "ru");
  101.  
  102.  
  103.     Painter pn("Света", 25, "woman");
  104.     cout << endl << endl;
  105.     Driver dr("Игорь", 33, "man");
  106.     cout << endl << endl;
  107.     Builder bd("Женя", 23, "man");
  108.     cout << endl << endl;
  109.  
  110.     vector<Worker*> workers;
  111.  
  112.     workers.push_back(&pn);
  113.     workers.push_back(&dr);
  114.     workers.push_back(&bd);
  115.  
  116.     cout << pn.Work() << endl;
  117.     cout << dr.Work() << endl;
  118.     cout << bd.Work() << endl;
  119.  
  120.  
  121.     cout << endl << endl;
  122.  
  123.     for (auto a : workers) {
  124.         cout << a->GetName() << " " << a->GetAge() << " " << a->GetGender() << " " << a->Work() << endl;
  125.     }
  126.  
  127.     //Print(pn);
  128.  
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement