C ++的数字继承层次结构

时间:2015-12-12 18:24:59

标签: c++ inheritance

我试图在C ++中实现Number层次结构。我打算编写一个抽象类Number并从Number派生ComplexNumber并从Complex和Integers,Naturals中派生出Real和Imaginary类,但问题是当我编写NaturalNumber时,有一堆setter,getters,variables我不会在NaturalNumber课程中使用它。

我可以避免这个吗?

1 个答案:

答案 0 :(得分:0)

我认为你有一点设计问题:)。

通常有用的指导是将继承视为关系。

如果B继承自A,则表示 B是A

我们的意思是B具有A的所有能力。

显然,这仍然留有一定的解释空间,这是一个优秀的软件架构师的工作来填补:)。 但我似乎很清楚Natural Number不能从Complex Number继承,因为它没有复数的所有属性。它没有不合理的部分,等等。 如果你真的想构建层次结构,那就是

Complex Number is a >  Real Number is a > Natural Number is a > Number. 

复数的实部和虚部也是>真实数字。

但是,在实际情况下(与练习相反),使用更平坦的层次结构可能会更好。所有这些都是数字,但从另一个继承复杂,真实和自然的数字并不是很有意义。只需从Number继承所有这些内容,您可能会感觉更好。

如您所述,还有其他方法可以重复使用代码,例如composition,如您所述。