我遇到了一个难题,我需要在公历和儒略历法的不同继承类型之间做出选择。我想要一个名为 Date 的类作为基类。 我的问题如下:我应该有一个继承自日期类的 Gregorian 类和 Julian 类吗?或者应该只有 Gregorian 类继承 Date 而 Julian 类继承 Gregorian,反之亦然?或者我是否应该在继承自 Date 的 Date 之下创建一个类,并让 Gregorian 和 Julian 从该类继承?
Date Date Date Date
Gregorian Julian Gregorian Julian New class
Julian Gregorian Gregorian Julian
我个人会选择两者都继承自 Date 的第一个替代方案,这是一个不错的选择。我能得到一些关于这个的意见吗?
最佳答案
我不知道日历系统的内部细节,但我确信很难不低估它们微妙的复杂性。仅这一点就让我绝对不想在类层次结构中混合实现。
我会去
- 单独的类(类型)
- 可选的非隐式转换
- 来自政策/策略类的共享实用程序以避免不必要的代码重复
附言。在经典的“Liskov”意义上,您可以有一个抽象 基类 Date,它只是“命名”所有(大多数?)日历系统共有的概念。但是,我真的很怀疑附加值是多少。我可以看到它会导致很多困惑(它邀请代码在任何或所有代码中混合 Date 的子类型,并且所有使用日期时间类的代码都必须准备好始终处理整个范围)。
关于c++ 公历和儒略历继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7588898/