La notion d'héritage est une notion de substitution (sauf heritage d'implementation, mais c'est a éviter):
http://en.wikipedia.org/wiki/Liskov_substitution_principle
Une classe virtuelle pure est une classe pour faire une normalisation d'interface, elle est utilisée dans énormément de design patterns dont le plus important:
http://www.design-up.com/articles/design/principesoo/dip.html