Penso che la citazione possa essere un sospetto. Di seguito, per esempio, non verrà compilato:
struct Base{
Base(int){}
};
struct Derived : Base{
using Base::Base;
};
int main()
{
Derived d; // error: Derived has no public default ctor!!!
}
Derived
contiene costruttori solo ereditato, ma non dispone di un pubblico quello di default! Ho detto pubblico! In realtà, il messaggio di errore da gcc
è:
'Derived :: Derivato()' è implicitamente eliminato perché la definizione di default sarebbe mal formati
Quindi, ciò che l'autore vuol dire è che se a Derived
classe inherit constructor da una classe Base
, verrà fornito un costruttore predefinito per Derived
, perché potrebbe essere necessario inizializzare il membro dati Derived
inizializzato che non può essere inizializzato dai costruttori ereditati, perché non sanno nemmeno della loro esistenza.
Infine, nel mio esempio il ctor predefinito per Derivato è stato eliminato in modo implicito dal compilatore, perché nessuno lo ha definito esplicitamente. Ma se si aggiunge un ctor predefinito a Base, sarà disponibile il ctor predefinito sintetizzato per Derivato.
fonte
2015-07-28 09:29:08
Se si eredita dalla classe costruibile con default, perché la classe derivata non dovrebbe essere anche costruibile in modo predefinito? – melak47
La domanda presuppone che la classe base definisca solo costruttori non predefiniti. – AlwaysLearning