предполагается, что у меня есть эти классы, и следующие основные:
class LabTest
{
private:
std::string labID;
bool result;
};
class Person
{
protected:
std::string name;
std::string lastName;
std::string ID;
std::list<LabTest> testList;
};
class Sick :public Person
{
//
};
//Encounter represents a person who comes in contact with a verified Sick
class Encounter : public Person
{
//
};
void main()
{
std::list<Person*> personList;
std::list<LabTest*> testList;
}
Теперь, если Encounter получил положительный результат LabTest, мне нужно заменить Encounter из personList в Sick. Я хотел бы написать что-то вроде этого:
void updateStatusPerson(Person* person, bool resultLabTest)
{
if (resultLabTest)
{
person = new Sick(/*(Encounter*)person*/);
}
}
, что Person * от типа Sick, заменить Person * от типа Encounter .. поэтому для реализации этого я добавил это в классе Sick:
Sick::Sick(Encounter* encounter) :Person(*(Person*)encounter)
{
delete encounter;
}
Хотя я реализовал конструктор глубокого копирования в классе Person (для выделения памяти). на самом деле я получил значение нежелательной в Person * в personList. Есть ли способ сделать это? Есть ли лучший дизайн для этого случая? спасибо вам всем.