班级B
有一组方法trait1
。
类B1
和C1
具有类似的方法组trait2
。
trait2
源自trait1
。
我该如何实现呢?我打算将所有这些trait
方法从主层次结构移到一个单独的方法中。然后从适当的特征派生B
,B1
和C1
。但后来我意识到从B1
继承B
会有问题,因为B1
也会有trait1
。
现在我想我可以有一些类型的字段,例如TraitBase
,并使用trait1
或trait2
类型的适当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
};
答案 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模式。