En C ++, ¿cuál es la diferencia entre un constructor implícito y un constructor predeterminado?


Respuesta 1:
clase Foo {
 público:
  // Ctor predeterminado.
  Foo (): i_ (0) {}

  // Conversión implícita ctor.
  Foo (int i): i_ (i) {}

  // Copiar ctor; No hay conversión involucrada.
  Foo (const Foo & f): i_ (f.i_) {}
 privado:
  int i_;
};

Bar vacío (Foo f) {
  // Haz algo con f
}

principal() {
  Foo f0; // Utiliza el ctor predeterminado.
  Foo f1 (1); // Utiliza ctor de conversión.
  Barra (f0); // Utiliza copy ctor.
  Barra (2); // Utiliza ctor de conversión implícita.
}
  Foo (int i = 0): i_ (i) {};

Respuesta 2:
#include 
struct X {
    X () {std :: cout << "Este es el ctor predeterminado para X \ n"; }
};
struct Y {
    Y (int n = 0) {std :: cout << "Este es el ctor predeterminado para Y \ n"; }
};
struct Z: X {
     // el constructor de Z está implícitamente definido
     // como Z (): X () {}
};
int main ()
{
    X x; // llama a X :: X ()
    Y y; // llama a Y :: Y ()
    Z z; // llama a Z :: Z (), que llama a X :: X ();
}