Considere el siguiente programa en C++.
#include<iostream> using namespace std; class A { public: A(){ cout <<"1";} A(const A &obj){ cout <<"2";} }; class B: virtual A { public: B(){cout <<"3";} B(const B & obj){cout<<"4";} }; class C: virtual A { public: C(){cout<<"5";} C(const C & obj){cout <<"6";} }; class D:B,C { public: D(){cout<<"7";} D(const D & obj){cout <<"8";} }; int main() { D d1; D d(d1); }
¿Cuál de los siguientes no está impreso?
Esta pregunta es aportada por Sudheendra Baliga
(A) 2
(B) 4
(C) 6
(D) Todo lo anterior
Respuesta: (D)
Explicación: La salida será 13571358 como 1357 (para D d1) y como 1358 (para D d(d1))……la razón es que……durante la herencia necesitamos llamar explícitamente al constructor de copia de la clase base; de lo contrario, solo se llama al constructor predeterminado de la clase base. Una cosa más, como estamos usando virtual antes de la clase base, solo habrá una copia de la clase base en la herencia múltiple. Y sin salida virtual será……13157….&…13158 como (1315713158) respectivamente para cada objeto de clase derivado.
Cuestionario de esta pregunta
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA