c++ 公历和儒略历继承

标签 c++ inheritance gregorian-calendar julian-date

我遇到了一个难题,我需要在公历和儒略历法的不同继承类型之间做出选择。我想要一个名为 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 的子类型,并且所有使用日期时间类的代码都必须准备好始终处理整个范围)。

顺便看看 Noda Time Joda Time 。人们普遍认为这些备受推崇的图书馆设计得特别好。

关于c++ 公历和儒略历继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7588898/

相关文章:

java - java中获取时间戳

c++ - C++在析构函数中杀死线程

c++ - 在其一侧显示 glutSolidCone

c++ - 从函数返回引用并修改它

c++ - g++ 在虚拟析构函数中给出删除数组的警告消息,这是什么意思?

c++ - 为什么 C++ 不让基类实现派生类的继承接口(interface)?

c++ - 什么是对象切片?

python - Django多模型继承,django-push-notifications

java - 调用 GergorianCalendar.isLeapYear() 时可以使用变量吗?

java - 在 Java 中将 LocalDate 转换为 GregorianCalendar