Вызвав конструктор Human
, вы можете создать только объект Human
.
Насколько я понимаю, вы хотите создать объект Male
или Female
в зависимости от гендерный вклад, который вы получаете во время выполнения. Тогда вам, вероятно, следует рассмотреть фабричную функцию для достижения этого.
Например, если вы определите Male
и Female
как:
struct Male: public Human {
Male(double height): Human(false, height) {}
// ...
};
struct Female: public Human {
Female(double height): Human(true, height) {}
// ...
};
Тогда Вы можете использовать следующую фабричную функцию, make_human()
:
std::unique_ptr<Human> make_human(bool isFemale, double height) {
if (isFemale)
return std::make_unique<Female>(height);
return std::make_unique<Male>(height);
}
. Во время выполнения она решает, создавать ли объект Female
или Male
на основе аргумента, переданного isFemale
. параметр.
Просто не забудьте сделать деструктор Human
virtual
, потому что Male
и Female
классы публично наследуются от Human
.