Salida del programa C++ | conjunto 2 – Part 1

Prediga la salida de los siguientes programas de C++.

Pregunta 1

#include<iostream>
using namespace std;
 
class A { 
 public:
    A(int ii = 0) : i(ii) {}
    void show() { cout << "i = " << i << endl;}
 private:
    int i;
};
 
class B {
 public:
    B(int xx) : x(xx) {}
    operator A() const { return A(x); }
 private:
    int x;
};
 
void g(A a)
{  a.show(); }
 
int main() {
  B b(10);
  g(b);
  g(20);
  getchar();
  return 0;
} 

Salida:
i = 10
i = 20

Dado que hay un constructor de conversión en la clase A, se puede asignar un valor entero a los objetos de la clase A y funciona la llamada a la función g(20). Además, hay un operador de conversión sobrecargado en la clase B, por lo que podemos llamar a g() con objetos de la clase B.

Pregunta 2

#include<iostream>
using namespace std;
  
class base {
    int arr[10];     
};
  
class b1: public base { };
  
class b2: public base { };
  
class derived: public b1, public b2 {};
  
int main(void)
{ 
  cout<<sizeof(derived);
  getchar();
  return 0;
}

Salida: si el entero ocupa 4 bytes, entonces 80.

Como b1 y b2 heredan de la clase base , hay dos copias de la clase base en la clase derivada . Este tipo de herencia sin virtual provoca despilfarro de espacio y ambigüedades. Las clases base virtuales se utilizan para ahorrar espacio y evitar ambigüedades en tales casos. Por ejemplo, el siguiente programa imprime 48. 8 bytes adicionales son para información de contabilidad almacenada por el compilador (consulte esto para obtener más detalles)

#include<iostream>
using namespace std;
  
class base {
  int arr[10];     
};
  
class b1: virtual public base { };
  
class b2: virtual public base { };
  
class derived: public b1, public b2 {};
  
int main(void)
{ 
  cout<<sizeof(derived);
  getchar();
  return 0;
}

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 *