que programacion poo polimorfismo objeto herencia ejemplos constructores clase abstracta c++ multiple-inheritance virtual-inheritance

programacion - En C++, ¿casi siempre uso la herencia virtual?



polimorfismo en c++ (2)

En mi experiencia, la herencia virtual (a diferencia de los métodos virtuales ) casi nunca es necesaria. En C ++ se usa para tratar el "problema de la herencia de diamante" , que si evita la herencia múltiple no puede suceder.

Estoy bastante seguro de que nunca he encontrado herencia virtual fuera de los libros de C ++, que incluye tanto el código que escribo como el millón de sistemas de líneas que mantengo.

Veo en esta entrada que la herencia virtual agrega sizeof (puntero) a la huella de memoria de un objeto. Aparte de eso, ¿hay algún inconveniente para mí al usar la herencia virtual de forma predeterminada y la herencia convencional solo cuando sea necesario? Parece que llevaría a un diseño de clase más a prueba de futuro, pero tal vez me esté perdiendo algún escollo.


Los inconvenientes son que

  1. Todas las clases deberán inicializar todas sus bases virtuales todo el tiempo (por ejemplo, si A es la base virtual de B y C deriva de B, también debe inicializar A).
  2. dynamic_cast usar el static_cast más costoso en todos los dynamic_cast donde use un static_cast (puede o no ser el problema, según su sistema y si su diseño lo requiere).

El punto 1 solo no hace que valga la pena, ya que no puedes ocultar tus bases virtuales. Casi siempre hay una manera mejor.