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; }
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