Setup
Я столкнулся со следующей ситуацией в моем коде C ++ (это пример для иллюстрации проблемы и не имеет ничего общего с реальным кодом). У меня есть виртуальный класс Family
и два класса, которые я получаю от него:
class Family {
public:
virtual double operator()(double const & x) const = 0;
virtual ~Family();
};
class Mother : public Family {
public:
double operator()(double const & x) const override { return x*x; }
};
class Father : public Family {
public:
double operator()(double const & x) const override { return x-2; }
};
Затем у меня есть еще один класс Car
. Этот класс должен иметь закрытый член, который может быть объектом из класса Mother
или Father
. Я попытался реализовать это как
class Car {
public:
Car(Family member) : right_seat_(member) {}
private:
Family right_seat_;
};
Если кто-то попытается запустить указанное выше через основную функцию
int main(){
Mother lucy = Mother();
Car Van = Car(lucy);
}
, я получаю сообщение об ошибке member
в конструкторе Car
не может быть объявлен, поскольку Family
является абстрактным. Я понимаю проблему и почему это происходит, но я не знаю, какой инструмент в C ++ лучше всего подходит для ее решения. К сожалению, я также не знаю, как это правильно гуглить (на самом деле я не нашел подходящих предложений).
То, что я пробовал до сих пор
Единственная идея, которая у меня была, заключалась в том, чтобы полностью удалить абстрактный класс и создать шаблон для класса Car
. Я бы хотел избежать этого, поскольку в исходной задаче два производных класса логически принадлежат к «суперклассу», поэтому я не хочу вводить это разделение, если оно не является абсолютно необходимым.