C++ | Herencia | Pregunta 14

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *