派生类派生特征

时间:2015-11-04 18:38:52

标签: c++ inheritance multiple-inheritance

这是图表: class hierarchy

班级B有一组方法trait1。 类B1C1具有类似的方法组trait2trait2源自trait1

我该如何实现呢?我打算将所有这些trait方法从主层次结构移到一个单独的方法中。然后从适当的特征派生BB1C1。但后来我意识到从B1继承B会有问题,因为B1也会有trait1

现在我想我可以有一些类型的字段,例如TraitBase,并使用trait1trait2类型的适当ctor启动它。但我不喜欢我应该有一个字段的想法所以我的班级有一些特殊的行为。可能还有另一种解决方案吗?谢谢。

更新

我的意思是,课程B有一些功能,它是在B1中派生的。 C1应该具有该类B1具有的功能。

class B
{
   virtual foo1();
   virtual foo2();


   virtual trait_method1(); //implementation 1
   virtual trait_method2(); //implementation 1
};

class B1 : public B
{
   virtual foo1();
   virtual foo2();


   virtual trait_method1(); //implementation 2
   virtual trait_method2(); //implementation 2
};

class C1 : public C
{
   virtual bar1();
   virtual bar2();


   trait_method1(); //implementation 2
   trait_method2(); //implementation 2
};

1 个答案:

答案 0 :(得分:2)

你的问题可以通过几乎从trait1继承来解决:

class trait2 : virtual public trait1{} class B : public A, virtual public trait1{} class B1 : public B, public trait2{} class C1 : public C, public trait2{}

但是,如果class trait1是无状态的,那么这种设计才有意义。如果没有,请考虑不同的设计,可能是Bridge模式。