Aquí nuestro tema de discusión son las herencias múltiples.
Múltiples herencias
Se produce una herencia múltiple cuando más de una clase opera como clase principal. En el lenguaje de programación de C ++, podemos derivar una clase de la clase base, pero también podemos derivar una clase de aquellas clases que también se derivan de otra clase base. Llamamos a este tipo de herencia múltiple herencia. Durante este proceso, también ocurren algunos problemas; Estos se explican más adelante en la guía.
Propósito de la herencia
La herencia es uno de los enfoques útiles e importantes de la OOP (programación orientada a objetos). El principal propósito de usar la herencia en OOP o C ++ es permitir que el usuario reutilice el código fuente. En lugar de escribir el mismo código varias veces, simplemente podemos usar la herencia para heredar las propiedades de una clase base para la clase infantil. Esto también reduce la complejidad del código fuente.
La sintaxis para las herencias múltiples es:
clase 1
;
Clase 2: Public 1
;
Clase 3: Public 2
;
Para heredar cualquier clase, el nombre de la clase infantil está escrito en el lado izquierdo, mientras que la clase principal está escrita en el lado derecho, y esto está separado por un colon. En la sintaxis anterior, la clase 2 se deriva de la clase 1, y la clase 3 se deriva de la clase 2.
Implementación de la herencia múltiple
Ejemplo 1
Este ejemplo es un uso de la herencia de muestra ya que las herencias múltiples contienen un niño con dos padres. Así que aquí, la clase C es una clase infantil, mientras que la Clase A y la Clase B son clases de padres. Cada clase incluye un constructor que mostrará un mensaje cada vez que se cree el objeto de clase. El uso de la biblioteca IOSTream ayuda a declarar funcionalidades CIN, cout. Ambas clases de los padres se declaran de cualquier manera, pero al declarar la clase infantil, debemos mencionar ambas clases de padres heredadas de la clase infantil. Aquí se debe tener en cuenta el orden de ambas clases. La clase que se declara primero debe mencionarse el último.
Por ejemplo, en el ejemplo dado, la clase A se crea primero en el código fuente que se menciona después de B, y la clase B se mencionará primero.
Clase C: Public B, Public A
Crearemos un objeto solo para la clase infantil en el programa principal, como en el proceso de herencia, el objeto de clase infantil accede automáticamente a la clase principal. Ahora guarde el archivo con el '.Extensión C ', compile el código a través de un compilador G ++. '-o' se utiliza para guardar la salida del archivo.
$ G ++ -O Multi -Multi.C
ps ./multi
En la ejecución exitosa, se mostrará la respuesta. Puede ver que el constructor de clase B se ejecutará primero solo por el orden requerido, aunque se declaró más tarde, luego se ejecuta el constructor de la clase A, y al final, la clase infantil misma se ejecuta.
Ejemplo 2
Aquí hay un ejemplo de herencias múltiples en las que una 'muñeca' de clase infantil contiene dos padres, un juguete y una plushtoy. Estas clases se declaran de la misma manera que en el último ejemplo. Cada constructor se crea para ambas clases de padres. La tercera clase, la clase infantil, solo se declara, pero su constructor no se crea; Solo hay una declaración. Aquí se cambia la orden para la Declaración de la clase de los padres, ya que el juguete de clase se declara primero, debe mencionarse más adelante, pero al momento de declarar la clase infantil, se menciona primero; Del mismo modo, la plantilla de clase de clase se declara más tarde también mencionada después del juguete de clase.
Mientras crea el objeto, los constructores de la clase principal se ejecutarán dependiendo de la orden mencionada al declarar la clase infantil.
Ahora ejecute el código; Verá que el constructor del juguete matriz se ejecuta primero, y luego se ejecuta el constructor de la clase "Plushtoy".
Ejemplo 3
Se produce un problema de diamante en la situación cuando dos padres (superclase) tienen una clase base común. Por ejemplo, el niño C tiene dos padres, A y B, y ambos pertenecen a una sola clase de base D. Entonces, Child Class C contendrá indirectamente dos copias de la Clase D, lo que conduce a la ambigüedad. Este problema se explica a través del código fuente de C ++.
Una persona de clase se crea como una clase base y tiene un constructor para mostrar un mensaje. Se crea otra facultad de clase que es un hijo de la "persona" de la clase base y tiene un constructor en la parte pública de la clase. Al igual que la facultad, también se crea un estudiante de clase que hereda de la persona de la clase de base matriz.
La facultad y los estudiantes se convierten en padres de superclase en ambas clases cuando una clase TA se deriva de ellos. Esta clase infantil TA se declara teniendo los nombres de ambas clases de padres.
Clase TA: Facultad pública: Estudiante público
Esto forma un diamante; Dos clases heredan una sola clase, mientras que una sola clase se hereda de estas dos clases. Así que indirectamente, la clase infantil contendrá datos de la clase base de sus padres.
La creación de objetos iniciará todos los constructores de las clases descritas anteriormente.
Cuando se ejecute el programa, verá que el constructor de la clase de la facultad se ejecutará primero, ya que la orden fue que se mencionó primero mientras declaraba una clase infantil. Entonces, la clase de la facultad primero mostrará el mensaje de clase de persona y luego su mensaje; Del mismo modo, la clase de estudiantes imprimirá nuevamente la clase de la persona primero y luego su mensaje. Y al final, se muestra el mensaje de clase infantil.
Si se declara algún proceso u operación en la clase base, se copiará dos veces. Esto causará ambigüedad.
Para eliminar este problema, hay una solución. La palabra clave 'virtual' se usa en este aspecto. Usar la palabra clave virtual con la clase matriz, la facultad y el alumno evitarán la creación de dos copias de una clase base. Esto se aplica a un ejemplo que se muestra a continuación.
El código restante es el mismo. Esto funcionará para que el constructor de clase base (persona) se llame de forma predeterminada cuando se crea el objeto. Esto eliminará la duplicación del mismo mensaje o cualquier operación.
Ahora ejecutaremos el código para ver los resultados. El constructor de clase base se ejecuta solo una vez.
Conclusión
'Herencia múltiple C ++' contiene la explicación básica de la herencia y la incluye en el código. Algunos ejemplos elementales se implementan en C ++ para explicar el funcionamiento de múltiples herencias. Esta guía viene con algunos problemas de herencia importantes como el problema de diamantes. Se elabora en detalle, y también la solución también se resalta. Con suerte, este esfuerzo será una fuente de conocimiento completo para los nuevos usuarios.