У меня есть класс Employee
и производные классы Worker
и Intern
.Я храню их в vector<shared_ptr<Employee>> Firm;
Теперь я хочу повысить Intern
до Worker
, заменив производный объект Intern
в vector
на Worker
, сохранив все поля из Employee
.
У меня есть:
void Promote(vector<shared_ptr<Employee>>& sourceEmployee) {
auto it = std::find_if(sourceEmployee.begin(), sourceEmployee.end(),
[&sourceEmployee, id](const auto &obj) { return obj->getID() == id; });
if (it != sourceEmployee.end()) {
auto index = std::distance(sourceEmployee.begin(), it);
switch(sourceEmployee[index]->getnum()) { // returning num / recognizing specified class obj
case 0: { // It's Intern, lets make him Worker
auto tmp0 = std::move(*it);
*it = std::make_shared<Worker>(*tmp0); // WORKING now
cout << "Employee " << id << " has been promoted" << endl;
break;
}
class Employee {
//basic c-tors etc.
protected:
int employeeID;
std::string Name;
std::string Surname;
int Salary;
bool Hired;
};
class Intern : public Employee {
protected:
static const int num = 0;
};
class Worker : public Employee {
protected:
static const int num = 1;
};
Так что в основном мне нужно уничтожить Intern
объект и создать вместо него Worker
в том же месте.
РЕДАКТИРОВАТЬ: Решено.Мне нужно было сделать правильный конструктор и добавить *
перед tmp)
^ _ ^