Sono confuso su quali potrebbero essere i problemi se un costruttore è stato ereditato da una classe base. Cpp Primer Plus dice,
Constructors are different from other class methods in that they create new objects, whereas other methods are invoked by existing objects. This is one reason constructors aren’t inherited. Inheritance means a derived object can use a base-class method, but, in the case of constructors, the object doesn’t exist until after the constructor has done its work.
Capisco che il costruttore sia chiamato prima che la costruzione dell'oggetto sia completata.
Come può portare a problemi se una classe figlio eredita ( Con l'ereditazione intendo che la classe figlio è in grado di sovrascrivere il metodo della classe genitore ecc. Non solo accedendo al metodo della classe genitore ) il costruttore genitore ?
Capisco che non vi è alcuna necessità di chiamare esplicitamente un costruttore da un codice [non che io sappia già.] tranne durante la creazione di oggetti. Anche in questo caso, è possibile utilizzare tale meccanismo per richiamare il costitutore principale [In cpp, utilizzando ::
o utilizzando member initialiser list
, in java utilizzando super
]. In Java c'è un'attuazione per chiamarla nella prima riga, capisco che è quello di garantire che l'oggetto padre sia creato prima e poi i proventi della costruzione dell'oggetto figlio.
Può sovrascrivere . Ma non riesco a trovare situazioni in cui ciò possa rappresentare un problema. Se il figlio eredita il costruttore genitore cosa può andare storto?
Quindi è giusto per evitare di ereditare funzioni non necessarie. O c'è dell'altro?