Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <set>
- #include <string>
- #include <iostream>
- #include <vector>
- using namespace std;
- // Человек
- class Person {
- public:
- Person() : Person("Ivan", 20, "man") {} // делегирование конструкторов
- Person(string name, int age, string gender) : name_(name), age_(age), gender_(gender) {
- cout << "Конструктор Person" << endl;
- };
- string GetName() const {
- return name_;
- }
- int GetAge() const {
- return age_;
- }
- string GetGender() const {
- return gender_;
- }
- private:
- string name_;
- int age_;
- string gender_;
- };
- // Рабочий.Владеет несколькими специальностями
- class Worker : public Person {
- public:
- Worker(){}
- Worker(string name, int age, string gender) : Person(name, age, gender) {
- cout << "Конструктор Worker" << endl;
- };
- void AddSpeciality(string speciality) {
- specialities_.insert(speciality);
- }
- bool HasSpeciality(string speciality) const {
- return specialities_.count(speciality);
- }
- virtual string Work() = 0;
- private:
- set<string> specialities_;
- };
- class Painter : public Worker {
- public:
- Painter(string name, int age, string gender) : Worker(name, age, gender) {
- cout << "Конструктор Painter" << endl;
- };
- string Work() {
- return "Я крашу";
- }
- };
- class Driver : public Worker {
- public:
- Driver(string name, int age, string gender) : Worker(name, age, gender) {
- cout << "Конструктор Driver" << endl;
- };
- string Work() {
- return "Я везу";
- }
- };
- class Builder : public Worker {
- public:
- Builder(string name, int age, string gender) : Worker(name, age, gender) {
- cout << "Конструктор Builder" << endl;
- };
- string Work() {
- return "Я строю";
- }
- };
- void Print(Worker& wk) {
- cout << wk.Work() << endl;
- }
- int main() {
- setlocale(LC_ALL, "ru");
- Painter pn("Света", 25, "woman");
- cout << endl << endl;
- Driver dr("Игорь", 33, "man");
- cout << endl << endl;
- Builder bd("Женя", 23, "man");
- cout << endl << endl;
- vector<Worker*> workers;
- workers.push_back(&pn);
- workers.push_back(&dr);
- workers.push_back(&bd);
- cout << pn.Work() << endl;
- cout << dr.Work() << endl;
- cout << bd.Work() << endl;
- cout << endl << endl;
- for (auto a : workers) {
- cout << a->GetName() << " " << a->GetAge() << " " << a->GetGender() << " " << a->Work() << endl;
- }
- //Print(pn);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement