A C ++, quina diferència hi ha entre un constructor implícit i un constructor predeterminat?


Resposta 1:
classe Foo {
 públic:
  // Ctor per defecte.
  Foo (): i_ (0) {}

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

  // Copiar ctor; no hi ha conversió.
  Foo (const Foo & f): i_ (f.i_) {}
 privat:
  int i_;
};

void Bar (Foo f) {
  // Feu alguna cosa amb f
}

principal () {
  Foo f0; // Utilitza ctor per defecte.
  Foo f1 (1); // Utilitza la conversió de ctor.
  Barra (f0); // Utilitza ctor de copia.
  Barra (2); // Utilitza ctor de conversió implícita.
}
  Foo (int i = 0): i_ (i) {};

Resposta 2:
#incloure 
struct X {
    X () {std :: cout << "Aquest és el ctor per defecte de X \ n"; }
};
struct Y {
    Y (int n = 0) {std :: cout << "Aquest és el ctor per defecte de Y \ n"; }
};
struct Z: X {
     // el constructor de Z està implícitament definit
     // com a Z (): X () {}
};
int principal ()
{
    X x; // truca X :: X ()
    I i; // truca Y :: Y ()
    Z z; // truca Z :: Z (), que truca a X :: X ();
}