Además de los ejemplos de libros de texto, en el mundo real, ¿tiene sentido alguna vez usar la herencia múltiple (donde más de una de las clases base no son interfaces puras) en C++?¿Cuáles son los ejemplos del mundo real de la herencia múltiple de C++?
Respuesta
Es muy común cuando se utiliza Policy-based design, por ejemplo.
Hay un ejemplo de libro de texto allí, pero nada se cita del mundo real. – Potatoswatter
Lo más fácil es apuntar a iostream
, que hereda de istream
y ostream
. cin
y cout
son istream
y ostream
respectivamente, pero fstream
deriva de iostream
.
ATL de Microsoft (Active Template Library) utiliza herencia múltiple como clases mixin:
He usado la herencia múltiple en el "mundo real", en un trabajo en el que participé en la codificación de una aplicación de mapeo.
Desafortunadamente, no puedo recordar el ejemplo exacto que encuentro increíblemente frustrante.
Sin embargo, aquí es un interesante artículo sobre los puntos a tener en cuenta y patrones alternativos o soluciones a considerar el uso de:
http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.2
me gusta el uso de vehículos para los ejemplos - sobre todo la adición en el vehículo anfibio.
Herencia múltiple definitivamente tiene su lugar y puede ser muy útil. Como regla general, una clase base debe ser abstracta siempre que sea posible, lo que significa que no deberías poder crear un objeto a partir de ella, pero nada te impide heredar de una clase concreta. Definitivamente es un mérito también que pueda aprovechar la implementación heredada de la clase base. El ejemplo de una de las respuestas en iostream es bueno. Otro ejemplo es quizás decir que modela un empleado que es también un propietario/director de un negocio y modelará como
public class Director
{
................
double CalculateDividend();
bool ApproveBudget();
};
public class Employee
{
................
double CalculateSalary();
};
public class WorkingDirector: Employee, Director
{
..............
};
Ahora un objeto WorkingDirector puede hacer lo que un empleado y un director puede hacer, que es una perfecto en el mundo real. Ni siquiera necesitaríamos sobrescribir ninguna implementación de método.
En muchos casos, la implementación de patrones de diseño también se simplifica con el soporte de herencia múltiple.
Este no es un ejemplo de palabra real. – Petter
IMO, está abierto a discusión. Antes de las plantillas, había un buen número de casos que lo justificaban. Básicamente, podrías usar clases base como si pudieras usar clases de política con plantillas. Por ejemplo, considere una plantilla como:
template <typename policy1, typename policy2>
class whatever {
policy1 p1;
policy2 p2;
public:
void dosomething() { if (p1.enquire()) p2.dosomething(); }
};
Si prefiere no utilizar las plantillas, por alguna razón, se puede obtener (a) las capacidades bastante similares con la herencia múltiple:
class whatever : policy1, policy2 {
void dosomething() { if (enquire()) dosomething(); }
};
En ambos casos, básicamente está incorporando una instancia de la "política" en su nuevo objeto.Dado que estamos usando herencia privada, no hay ninguna preocupación con el LSP, al igual que con las plantillas basadas en políticas, la intención no es crear una gran jerarquía que afirme nada sobre las relaciones entre los miembros de la jerarquía, sino que es simplemente crear la capacidad de crear una gran variedad de clases no relacionadas bajo demanda.
- 1. ¿Cuáles son los ejemplos del mundo real de cuándo deben usarse las listas vinculadas?
- 2. Ejemplos del mundo real del patrón Builder
- 3. Kerberos - ejemplos del mundo real?
- 4. ¿Cuáles son los problemas del mundo real con Ruby?
- 5. Ejemplos del mundo real de los métodos de protocolo @opcional
- 6. Ejemplos del mundo real de estructuras arbóreas
- 7. ¿Cuáles son algunas aplicaciones destacadas del mundo real de Java?
- 8. ejemplos del mundo real de Rx
- 9. ejemplos del mundo real de funciones anidadas
- 10. Ejemplos del mundo real del patrón Método de fábrica
- 11. Ejemplos de "elementos de programación" del mundo real?
- 12. En busca del mundo real Ejemplos de Gradle
- 13. ¿Cuáles son algunos ejemplos de la vida real de patrones de diseño utilizados en el software
- 14. OpenGL ES 2.0 múltiples mallas? (solo ejemplos del mundo real)
- 15. ¿Cuáles son las aplicaciones del mundo real de la codificación huffman?
- 16. Enterprise Service Bus uso del mundo real o ejemplos
- 17. SOA Architecture Ejemplos del mundo real con .NET
- 18. C# Threading en aplicaciones del mundo real
- 19. ¿Cuáles son algunos buenos ejemplos de Mixins y/o Rasgos?
- 20. Estructuras: ejemplos de la vida real?
- 21. casos de uso del mundo real para indexadores de C#?
- 22. ¿Cuán precisas son las unidades del mundo real de CSS?
- 23. ¿Errores de tipografía del mundo real?
- 24. ¿Cuáles son algunos ejemplos impresionantes de código funcional?
- 25. ¿Cuáles son los métodos más prácticos de modelado de software orientado a objetos en proyectos del mundo real?
- 26. ¿Las interfaces son redundantes con herencia múltiple?
- 27. ¿Cuáles son los ejemplos canónicos de cómputo paralelo?
- 28. ¿Cuáles son algunos ejemplos de interfaces Go?
- 29. PHP: OOP del mundo real ejemplo
- 30. Herencia múltiple de Objective-C
+1 en casi 20 años de programación en C++ He * never * estado en el que * he necesitado * para usar herencias múltiples. – Raedwald
@ Raedwald eso no significa que alguien no deba saber cómo funciona la Herencia Múltiple en C++. – anonymous