类似但不兼容的类

时间:2017-01-07 12:46:44

标签: c++ oop

对于以下问题(在C ++中最重要的),有什么好的做法?

我想实现两个(以及更多)类非常相似但应该不兼容的类。例如,我将其命名为class Appleclass Orange。显然,然后有共同的属性,如物种,年龄,位置等等,但苹果对象永远不应该分配给橙色变量。

更重要的是:应该有成员函数接受(或返回)自己的类,而不是其他类。例如,Apple类将具有:Apple[] getAllFromTheSameTree();和类Orange将具有:Orange[] getAllFromTheSameTree();类似于void addToSameTree(Apple)等等,请记住苹果不能与橙子在同一棵树上

一个想法是拥有一个定义公共属性的抽象根类(class Fruit)。但这将允许函数接受Fruit类型参数,我想禁止它 - 如果可能的话。)

另一个想法是模板:Fruit<Apple>Fruit<Orange>(Apple和Orange在这里会是一些虚拟空类型)。

1 个答案:

答案 0 :(得分:0)

  

一个想法是拥有一个抽象的根类(Fruit类)来定义通用属性

是的,这就是我的建议。

  

但是,这将允许函数接受Fruit类型的参数,   我要禁止-如果可能的话。)

嗯,那不是问题。因为是抽象的,所以不能存在Fruit

类型的对象

例如具有此签名的功能:

void consume_fruit(Fruit& fruit)

将接受任何种类的水果(AppleOrange)。并且由于Fruit是抽象的,它不会仅仅因为类型Fruit的对象就不存在而接受类型Fruit的对象。

相似的集合,例如std::vector<std::shared_ptr<Fruit>>可以容纳从FruitAppleOrange)派生的类型的对象,但是同样不能有Fruit类型的对象。