Back
Close

Herencia en C++ (Práctica 3)

Herencia virtual

Visualice una situación en la que hay herencia híbrida dada por la combinanción de herencia jerárquica, herencia múltiple y herencia multinivel. En dicha situación dos clases B y C heredan de una clase A, y a su vez una clase D hereda de las clases B y C al tiempo. La situación puede observarse en el siguiente gráfico y en el siguiente coódigo de ejemplo.Por favor ejecutelo y observe el resultado al final de la ejecución.

Image of Yaktocat

Como puede observar el código ha sido compilado pero en tiempo de ejecución la llamada al método "unMetodoX" es ambigua ya que la clase D lo hereda directamente de B y C, pero también a través de esas clases lo hereda de la clase A. De modo que no sabe cuál de los 3 debería ejecutar. Esta es una situación poco común en una aplicación real desarrollada en C++ ya que los cánones de buenas prácticas de programación sugieren que se evite a toda costa la herencia múltiple, de hecho otros lenguajes de programación orientada a objetos como por ejemplo Java no permiten implementar herencia múltiple. Pero en caso de que por alguna razón se vea obligado a implmentar una estructura jerárquica de ese tipo se sugiere el uso de la palabra reservada virtual en la herencia de las clases intermedias B y C. Lo anterior corrige el problema de la ambigüedad y ya no se dará el error y se ejecutará el método heredado desde la clase A.

Considere que se implementó la herencia virtual para evitar el problema de ambigüedad, luego responda a las siguientes inquietudes:

Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Go to tech.io