Salida del programa C++ | conjunto 8

Prediga la salida de los siguientes programas C++.

Pregunta 1

#include<iostream>
using namespace std;
  
class Test1
{
    int x;
public:
    void show() {  }
};
  
class Test2
{
    int x;
public:
    virtual void show() {  }
};
  
int main(void)
{
    cout<<sizeof(Test1)<<endl;
    cout<<sizeof(Test2)<<endl;
    return 0;
}

Salida:
4
8
Solo hay una diferencia entre Test1 y Test2. show() no es virtual en Test1, pero es virtual en Test2. Cuando hacemos una función virtual, el compilador agrega un puntero adicional vptr a los objetos de la clase. El compilador hace esto para lograr el polimorfismo en tiempo de ejecución (consulte el capítulo 15 del libro Thinking in C++ para obtener más detalles). El puntero adicional vptr se suma al tamaño de los objetos, por eso obtenemos 8 como tamaño de Test2.

Pregunta 2

#include<iostream>
using namespace std;
class P
{
public:
    virtual void show() = 0;
};
  
class Q : public P { 
   int x;
};
  
int main(void)
{
    Q q;
    return 0;
}

Salida: Error del compilador
Obtenemos el error porque no podemos crear objetos de clases abstractas. P es una clase abstracta ya que tiene un método virtual puro. La clase Q también se vuelve abstracta porque se deriva de P y no implementa show().

Escriba comentarios si encuentra que alguna de las respuestas/explicaciones es incorrecta, o si desea compartir más información sobre los temas discutidos anteriormente.

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 *