Prata, C++ Primer Plus, p. 677:
"One school of thought holds that if you design an inheritance hierarchy of classes, the only concrete classes should be those that never serve as a base class. This approach tends to produce cleaner designs with fewer complications."
Do most of you advanced programmers here adhere to this rule?
I kind of picture the hierarchy of classes more or less like the taxonomical scheme used in biology, for which this principle does make sense: There is no object that is a mammal, for example, (abstract class) without belonging to a particular species such as deer, rabbit, squirrel, dog, etc. (concrete classes).
The only possible exception I can think of in terms of this analogy anyway is if you have an object about which you only have partial knowledge and aren't sure yet which concrete class it might belong to but still want to do work with it in the meantime.