Soy un estudiante de primer año en C++, especialmente sobre programación orientada a objetos. Y ahora tengo un problema durante mi aprendizaje.Orden de constructor en la herencia virtual
Hay una jerarquía de clases siguientes:
class Class{};
class Base:public Class{};
class Derived1:virtual public Base{};
class Derived2:virtual public Base{};
class MI:public Derived1,public Derived2{};
class Final:public MI,public Class{};
y ahora quiero saber cuál es el orden del constructor para la definición de un objeto de clase final es.
Dibujo un diagrama: structure of class inheritance http://hi.csdn.net/attachment/201203/16/2712336_1331902452BziD.jpg
sé clases base virtuales se construyen siempre antes de la base de clases no virtual, independientemente de si aparecen en la jerarquía de herencia. Lo que estoy confundido es que si el constructor de la clase Class está antes de Base, y si el constructor de Class se invoca dos veces. ¿Y por qué?
¿Alguien me puede decir la respuesta? Cuanto más detallado mejor.
Es bastante fácil de entender de una manera perezosa. Construye un programa. Ponga instrucciones de depout cout en cada uno de sus constructores (.e.g "¡Soy Constructor Base!"). Observe el orden de construcción siguiendo las instrucciones cout. –
advertencia: base directa 'Clase' inaccesible en 'Final' debido a la ambigüedad –
@ 0A0D: Por supuesto, eso solo le dice cómo el compilador actual puede implementarlo. Eso puede ser lo suficientemente bueno para ti, pero tal vez no lo sea. :) –