Advertisement
35657

Untitled

May 11th, 2024
469
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.26 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.     Person(string name, int age, string gender) : name_(name), age_(age), gender_(gender) {};
  13.  
  14.     string GetName() const {
  15.         return name_;
  16.     }
  17.     int GetAge() const {
  18.         return age_;
  19.     }
  20.     string GetGender() const {
  21.         return gender_;
  22.     }
  23.  
  24. private:
  25.     string name_;
  26.     int age_;
  27.     string gender_;
  28. };
  29.  
  30.  
  31.  
  32.  
  33. // Рабочий
  34. class Worker : public Person {
  35. public:
  36.     Worker(string name, int age, string gender) : Person(name, age, gender) {};
  37.  
  38.     virtual string Work() = 0;
  39.  
  40. };
  41.  
  42.  
  43. // Маляр
  44. class Painter : public Worker {
  45. public:
  46.     Painter(string name, int age, string gender) : Worker(name, age, gender) {};
  47.  
  48.     string Work() {
  49.         return "Я крашу";
  50.     }
  51. };
  52.  
  53. // Водитель
  54. class Driver : public Worker {
  55. public:
  56.     Driver(string name, int age, string gender) : Worker(name, age, gender) {};
  57.  
  58.     string Work() {
  59.         return "Я везу";
  60.     }
  61. };
  62.  
  63. // Строитель
  64. class Builder : public Worker {
  65. public:
  66.     Builder(string name, int age, string gender) : Worker(name, age, gender) {};
  67.  
  68.     string Work() { // если убрать реализацию метода, то Builder унаследует виртуальный метод и также станет абстрактным, создавать его экземпляры не получится
  69.         return "Я строю";
  70.     }
  71. };
  72.  
  73. int main() {
  74.     setlocale(LC_ALL, "ru");
  75.  
  76.     Painter pn("Света", 25, "woman");
  77.     Driver dr("Игорь", 33, "man");
  78.     Builder bd("Женя", 23, "man");
  79.  
  80.     //Worker wk("Лена", 25, "women"); создать объект абстарктного класса нельзя, можно только унаследоваться от него и переопределить виртуальные методы (либо унаследоваться ещё)
  81.  
  82.     vector<Worker*> workers;
  83.  
  84.     workers.push_back(&pn);
  85.     workers.push_back(&dr);
  86.     workers.push_back(&bd);
  87.  
  88.     for (auto a : workers) {
  89.         cout << a->GetName() << " " << a->GetAge() << " " << a->GetGender() << " " << a->Work() << endl;
  90.     }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement