I know it is a no - no to call functions from the constructor that rely on init() having already run. So things like pinMode and digitalWrite should be in a begin method somewhere.
So I always thought that is exactly what happened with something like the stock LiquidCrystal library. But no. Upon closer inspection, the constructor calls the LiquidCrystal::init() function which calls pinMode all over the place and then calls begin(16,1). SO if you have a 16 x 1 display, you wouldn't even have to call begin because the constructor calls it!
How does that work? Is just moving it out of the constructor proper and into a function called by the constructor enough to pass?