Enums and classes
One general piece of advice which I sometimes see is to avoid enums entirely and instead prefer the use of classes to represent what would otherwise be enum values. (This is not meaningful in Java where enums are classes with full extensibility.) Instead of enum class OfficeNames { LAUDS = 0, PRIME = 1, TERCE = 2, SEXT = 3, NONE = 4, VESPERS = 5, COMPLINE = 6 }; one would define an abstract class as a parent: class OfficeName { virtual ~OfficeName(); }; and then implement a set of inheriting concrete classes, which should be stateless: class LaudsName: public OfficeName { ~LaudsName() override; }; // etc. Even if you don't have any virtual functions which do something, this makes it impossible to cast an integer directly to the enum type (which can create surprises in handling what you may think is a strictly limited set of values). The bigger driver of the advice is that it allows the removal of switch statements. Instead of: void MyClass::performUpdate(con...