Ogni classe necessita' di almeno un costruttore.
Se non viene esplicitamente dichiarato, il compila
crea un costruttutore di default, che non fa nulla e che non richiede nessun parametro:
struct S { };
e' equivalente a
struct S {
S(){ }
};
Ovviamente, se viene indicato un costruttore, di qualunque tipo, il compilatore non crea il costruttore di default.
Ogni costruttore di una classe derivata, per prima cosa chiama
deve chiamare il costruttore della classe base.
Se non esplicitamente indicato, il compilatore aggiunge la chiamata al costruttore di default della classe base.
Questo implica che se la classe base non ha definito il costruttore di default, ma un'altro costruttore, e nella classe derivata non viene indicato esplicitamente quale costruttore della classe base chiamare, verra' generato un errore:
struct B
{
B(int i) { }
};
struct D : public B
{
D() { }
};
/*
*
*/
int main(int argc, char** argv) {
D d;
return 0;
}