#include <iostream> using namespace std; class A { public: virtual void fun() { cout << "A::fun() "; } }; class B: public A { public: void fun() { cout << "B::fun() "; } }; class C: public B { public: void fun() { cout << "C::fun() "; } }; int main() { B *bp = new C; bp->fun(); return 0; }
(A) A::fun()
(B) B::fun()
(C) C::fun()
Respuesta: (C)
Explicación: Lo importante a tener en cuenta aquí es que B::fun() es virtual incluso si no lo hemos hecho, usa la palabra clave virtual con él.
Cuando una clase tiene una función virtual, las funciones con la misma firma en todas las clases descendientes se vuelven automáticamente virtuales. No necesitamos usar la palabra clave virtual en la declaración de fun() en B y C. De todos modos, son virtuales.
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