C++ | Herencia | Pregunta 3

Suponga que un número entero ocupa 4 bytes y no hay alineación en las siguientes clases, prediga la salida.

#include<iostream>
using namespace std;
  
class base {
    int arr[10];
};
  
class b1: public base { };
  
class b2: public base { };
  
class derived: public b1, public b2 {};
  
int main(void)
{
  cout << sizeof(derived);
  return 0;
}

(A) 40
(B) 80
(C) 0
(D) 4

Respuesta: (B)
Explicación: Dado que b1 y b2 heredan de la clase base, hay dos copias de la clase base en la clase derivada. Este tipo de herencia sin virtual provoca despilfarro de espacio y ambigüedades. Las clases base virtuales se utilizan para ahorrar espacio y evitar ambigüedades en tales casos. Por ejemplo, el siguiente programa imprime 48. 8 bytes adicionales son para información de contabilidad almacenada por el compilador (consulte esto para obtener más detalles)

#include<iostream>
using namespace std;
 
class base {
  int arr[10];     
};
 
class b1: virtual public base { };
 
class b2: virtual public base { };
 
class derived: public b1, public b2 {};
 
int main(void)
{ 
  cout << sizeof(derived);
  return 0;
} 

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 *