Prediga la salida del siguiente programa C++. Suponga que no hay alineación y que el compilador realiza una implementación típica de funciones virtuales.
#include <iostream> using namespace std; class A { public: virtual void fun(); }; class B { public: void fun(); }; int main() { int a = sizeof(A), b = sizeof(B); if (a == b) cout << "a == b"; else if (a > b) cout << "a > b"; else cout << "a < b"; return 0; }
(A) a > b
(B) a == b
(C) a < b
(D) Error del compilador
Respuesta: (A)
Explicación: la clase A tiene un VPTR que no está en la clase B.
En una implementación típica de funciones virtuales, el compilador coloca un VPTR con cada objeto. El compilador agrega secretamente algo de código en cada constructor a esto.
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