Salida de programas C++ | Set 27 (Constructores y Destructores)

Prerrequisito: Constructores y Destructores

1) ¿Cuál es la salida del siguiente programa?

#include <iostream>
using namespace std;
class Sand
{
    public: Sand()
        {
            cout << "Sand ";
        }
        ~Sand()
        {
            cout << "~Sand ";
        }
};
class Rock
{
    public: Rock()
        {
            cout << "Rock ";
        }
        ~Rock()
        {
            cout << "~Rock ";
        }
};
class Hill: public Sand
    {
        Rock data_;
        public: Hill()
            {
                cout << "Hill " << endl;
            }
            ~Hill()
            {
                cout << "~Hill ";
            }
    };
  
int main()
{
    Hill h;
    return 0;
}

Producción:

Sand Rock Hill 
~Hill ~Rock ~Sand 

Explicación: Primero se llama al constructor del objeto de la clase base, luego se llama al constructor del objeto incrustado (miembro de datos)
y finalmente se ejecuta el constructor heredado. El orden de destrucción es el inverso.

2) ¿Cuál es la salida del siguiente programa?

class gfg
{
        ~gfg()
        {
            cout << "I love coding";
        }
    public:    gfg() 
        {
            cout << "I am at your service";
        }
};
int main()
{
   gfg mygfg;
}

Salida: error de compilación

error: ‘gfg::~gfg()’ is private

Explicación:
el programa no se compilará porque el destructor es privado.
3) ¿Cuál es la salida del siguiente programa?

#include <iostream>
using namespace std;
class X 
{ 
    public: void foo() 
    {
        cout << "X::f ";
    }
    virtual void go()
    {
        cout << "X::g ";
    }
};
class Y: public X 
    {
        public: virtual void foo() 
            {
                cout << "Y::f ";
            }
        virtual void go() 
            {
                 cout << "Y::g "; 
            }    
     };
int main()
{
    X x;
    Y y;
    X& rx = y;
    rx.foo();
    rx.go();
    return 0;
}

Producción:

X::f Y::g

Explicación: el método X::f no es polimórfico en X (se vuelve polimórfico solo en la clase Y). Por lo tanto, rx se une al tipo de referencia (X&) y no al objeto subyacente (Y&).

4) ¿Cuál es la salida del siguiente programa?

class A
{
    public: A(int)
    {
    }
};
  
void f()    
{
    A a[10];
}
  
int main()
{
 f();
}

Salida: error de compilación

no matching function for call to ‘A::A()’

Explicación: agregar public A(){}; a la definición de la clase A. Necesita un constructor sin parámetros para poder crear una instancia de su clase. El constructor actual requiere dos parámetros de string de entrada. Normalmente, C++ implica tener un constructor de este tipo (= constructor predeterminado sin parámetros) si no hay otro constructor declarado. Al declarar su primer constructor con dos parámetros, sobrescribe este comportamiento predeterminado y ahora debe declarar este constructor explícitamente.

5) ¿Cuál es la salida del siguiente programa?

#include <iostream>
using namespace std;
   
class GFG
{
public:
      GFG()
      {
         cout << "Hi from GFG. ";
      }
} g;
   
int main()
{
    cout << "You are in Main";
    return 0;
}

Producción:

Hi from GFG. You are in Main

Explicación: g es un objeto de la clase GFG para el cual el constructor se dispara primero. Luego se imprime la declaración de cout de main.

Este artículo es una contribución de Pavan Gopal Rayapati . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado 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 *