Salida del siguiente programa?
#include <iostream> #include<string> using namespace std; class Base { public: virtual string print() const { return "This is Base class"; } }; class Derived : public Base { public: virtual string print() const { return "This is Derived class"; } }; void describe(Base p) { cout << p.print() << endl; } int main() { Base b; Derived d; describe(b); describe(d); return 0; }
(A)
This is Derived class This is Base class
(B)
This is Base class This is Derived class
(C)
This is Base class This is Base class
(D) Error del compilador
Respuesta: (C)
Explicación: tenga en cuenta que se pasa un objeto de Derivado en describe(d), pero se llama a la impresión de Base. La función describe acepta un parámetro de tipo Base.
Este es un ejemplo típico de segmentación de objetos, cuando asignamos un objeto de clase derivada a un objeto de tipo base, el objeto de clase derivada se separa y todos los miembros de datos heredados de la clase base se copian. El corte de objetos debe evitarse, ya que puede haber resultados sorprendentes como el anterior. Como nota al margen, el corte de objetos no es posible en Java. En Java, cada variable no primitiva es en realidad una referencia.
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