Maybe I'm missing something, I don't see the reason why virtuals are used here at all. All the methods of CChainsParams and subclasses simply return [references to] properties of the object anyway. They could be moved to the superclass, and the only difference between the classes would be the constructor. Then one wouldn't even need a subclass per network at all. They could just be three instances of the base class, making the entire thing data-driven.

... what am I missing?