В C ++, каква е разликата между неявен конструктор и конструктор по подразбиране?


Отговор 1:
клас Foo {
 публичния:
  // По подразбиране ctor.
  Foo (): i_ (0) {}

  // Неизразен преобразувател.
  Foo (int i): i_ (i) {}

  // Копирайте ctor; не се включва преобразуване.
  Foo (const Foo & f): i_ (f.i_) {}
 лично:
  int i_;
};

празнота Bar (Foo f) {
  // Направете нещо с f
}

main () {
  Foo f0; // Използва ctor по подразбиране.
  Foo f1 (1); // Използва преобразувател.
  Бар (f0); // Използва екземпляр за копиране.
  Бар (2); // Използва неявен преобразувател.
}
  Foo (int i = 0): i_ (i) {};

Отговор 2:
#include 
структура X {
    X () {std :: cout << "Това е ctor по подразбиране за X \ n"; }
};
struct Y {
    Y (int n = 0) {std :: cout << "Това е ctor по подразбиране за Y \ n"; }
};
Stru Z: X {
     // конструкторът на Z е дефиниран неявно
     // като Z (): X () {}
};
int main ()
{
    X x; // извиква X :: X ()
    Y y; // обажда се Y :: Y ()
    Z z; // извиква Z :: Z (), който извиква X :: X ();
}