C ++ sottoclasse che deriva da classi che derivano dalla stessa classe
-
25-09-2019 - |
Domanda
Perché è la seguente struttura di ereditarietà non legittima in C ++?
- Son1 deriva dal Padre 1
- Son2 deriva dal Padre 1
- GrandSon1 deriva dal Son1 e Son2
Se ci potrebbe essere un caso in cui questo è legittimo (forse, se tutte le classi sono puri-virtuale tranne GrandSon1), cosa sono e come mai?
Soluzione
Ti sbagli, questo è perfettamente legale in C ++. Si potrebbe guardare in virtuale eredità però.
Altri suggerimenti
Questa gerarchia di ereditarietà è chiamato il diamante della morte e è legale in C ++, se si utilizza virtuale eredità, anche se di solito è ancora problematico.
Questo è il C ++ diamante problema.
Questo è il tipico diamante eredità. Essa si verifica anche nella libreria standard iostream dove deriva sia da istream e ostream e due di questi derivano da ios_base.
Ci sono varie questioni:
-
Se Padre ha un metodo virtuale ed entrambi Son1 e Son2 attuarlo, a meno che implementa Grandson troppo che ha da Stato che di Son1 e Son2 dei metodi da essa svolte.
-
Se il Padre ha delle componenti di dati, Nipote otterrebbe due volte.
-
In ogni caso Padre ha un v-tavolo in modo ti sembra di avere 2 copie di questo.
Le classi medie pertanto usano solitamente ereditarietà virtuale, che è difficile, ma efficace significa solo la classe finale ottiene la classe di base. Quindi in questo caso Grandson stesso è responsabile per la costruzione di padre e si ipotizza che "avere" esso.
Non ci sono ulteriori problemi di stare attenti se avete intenzione di lanciare tutti i puntatori. In particolare fare attenzione con la fusione da e verso un * vuoto.
mi ha fatto pensare che si sta confondendo gerarchia di classe e un'istanza di classe.
una classe "nipote" può derivare da una classe "figlio", ma un'istanza di un "nipote" non può essere da 2 istanze della classe "figlio"
In ogni caso, penso che non si dovrebbe fare così perché ad un certo punto si avrà una classe "grand-nipote" e una classe "grand-grand-nipote".
Fare la nave rapporto tra genitori e fratelli in un altro modo.