对于以下问题(在C ++中最重要的),有什么好的做法?
我想实现两个(以及更多)类非常相似但应该不兼容的类。例如,我将其命名为class Apple
和class Orange
。显然,然后有共同的属性,如物种,年龄,位置等等,但苹果对象永远不应该分配给橙色变量。
更重要的是:应该有成员函数接受(或返回)自己的类,而不是其他类。例如,Apple类将具有:Apple[] getAllFromTheSameTree();
和类Orange将具有:Orange[] getAllFromTheSameTree();
类似于void addToSameTree(Apple)
等等,请记住苹果不能与橙子在同一棵树上
一个想法是拥有一个定义公共属性的抽象根类(class Fruit
)。但这将允许函数接受Fruit
类型参数,我想禁止它 - 如果可能的话。)
另一个想法是模板:Fruit<Apple>
和Fruit<Orange>
(Apple和Orange在这里会是一些虚拟空类型)。
答案 0 :(得分:0)
一个想法是拥有一个抽象的根类(Fruit类)来定义通用属性
是的,这就是我的建议。
但是,这将允许函数接受Fruit类型的参数, 我要禁止-如果可能的话。)
嗯,那不是问题。因为是抽象的,所以不能存在Fruit
例如具有此签名的功能:
void consume_fruit(Fruit& fruit)
将接受任何种类的水果(Apple
,Orange
)。并且由于Fruit
是抽象的,它不会仅仅因为类型Fruit
的对象就不存在而接受类型Fruit
的对象。
相似的集合,例如std::vector<std::shared_ptr<Fruit>>
可以容纳从Fruit
(Apple
,Orange
)派生的类型的对象,但是同样不能有Fruit
类型的对象。