Para resolver un problema de herencia en forma de diamante. (B y C ambos heredan de A. ¿Qué sucede con los atributos de A en D que hereda de B y C?)
Un cliente de su biblioteca podría ver un RedWidget y un FlyingWidget, y podría querer combinarlos en una RedFlyingWidget.
El usuario tendría que especificar que una de las clases base sea virtual al heredar. Pero eso no es responsabilidad de un creador de bibliotecas.
OOP fluye mejor con la herencia de implementación única, así que eso es lo que usaría en toda la biblioteca.
También hay árboles de "herencia al revés", como se describe en la excelente "Modern C++ Design" de Alexandrescu. Permiten a los clientes obtener más funcionalidades en forma de mezclas que se denominan políticas.
La programación con políticas permite una mayor capacidad de combinar funcionalidad, a expensas de la limpieza sintáctica. Piensa en la implementación de STL, por ejemplo.
¿Qué quiere decir con "herencia virtual"? –
@unapersson: http://en.wikipedia.org/wiki/Virtual_inheritance – Mat
@Mat Soy muy consciente de las clases base virtuales. Sin embargo, C++ no tiene ningún concepto de herencia virtual, o si lo hace no se menciona en el estándar de C++. –