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?

È stato utile?

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.

See: http://en.wikipedia.org/wiki/Diamond_problem

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top