【发布时间】:2020-08-21 11:17:00
【问题描述】:
设置
我在我的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_;
};
如果尝试通过 main 函数运行上述代码
int main(){
Mother lucy = Mother();
Car Van = Car(lucy);
}
我得到一个错误,Car 的构造函数中的member 不能被声明,因为Family 是抽象的。我了解这个问题以及为什么会发生这种情况,但我不知道 C++ 中解决问题的正确工具是什么。不幸的是,我也不知道如何正确地用谷歌搜索(我真的没有找到任何合适的建议)。
到目前为止我尝试了什么
我唯一的想法是完全删除抽象类并将Car 类模板化。我想避免这种情况,因为在原始问题中,两个派生类在逻辑上属于“超类”,所以如果不是绝对必要,我不想引入这种拆分。
【问题讨论】:
标签: c++ class inheritance abstract-class