#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Worker
{
private:
    std::string m_name;

public:
    Worker(std::string name)
        : m_name(name)
    {
    }

    std::string getName() { return m_name; }
};

class Department
{
private:
    std::vector<Worker> m_worker;

public:

    void add(Worker *worker)
    {
        m_worker.push_back(*worker);
    }

//    friend std::ostream& operator<<(std::ostream& out, const Department
//    &department)
//    {
//        out << "Departments:";
//        for (unsigned int count = 0; count < department.m_worker.size();
//        ++count)
//        out << department.m_worker[count]->getName()<< ' ';
//        out << '\n';
//
//        return out;
//    }

 };

int main()
{
    // Создаем Работников вне области видимости класса Department
    Worker *w1 = new Worker("Anton");
    Worker *w2 = new Worker("Ivan");
    Worker *w3 = new Worker("Max");

    {
    // Создаем Отдел и передаем Работников в качестве параметров
    Department department; // содаем пустой Отдел
    department.add(w1);
    department.add(w2);
    department.add(w3);

//    std::cout << department;

    } // department выходит из области видимости и уничтожается здесь

    std::cout << w1->getName() << " still exists!\n";
    std::cout << w2->getName() << " still exists!\n";
    std::cout << w3->getName() << " still exists!\n";

    delete w1;
    delete w2;
    delete w3;

    return 0;
 }
