Herencia en C++ (Práctica 3)

camilocorreaUdeA
157.2K views

Open Source Your Knowledge, Become a Contributor

Technology knowledge has to be shared and made accessible for free. Join the movement.

Create Content

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:

¿Qué pasa cuándo una de las dos clases derivadas intermedias, B o C, (pero no las dos al tiempo) redefine el método unMetodoX?
¿Qué pasa cuándo ambas clases B y C redefinen el método unMetodoX?
Open Source Your Knowledge: become a Contributor and help others learn. Create New Content