I usually make a base class abstract to give the signal this is a base class – you cannot instantiate me! even if there are no abstract methods in it.
Furthermore, I always make the base class constructor protected, although there’s no real functional need to do that – I just want to make another point that this is a base class – you cannot instantiate me!
Am I jumping through hoops in doing that? What do you do?
It seems a reasonable thing to do, yes. There’ll be no functional difference between the constructor being public or being protected, but making it protected gives a clearer indication of the intended use.