2013-04-24 14 views
6

Qui ci sono molte risposte che dicono di non ereditare da std :: vector e simili come this question. Capisco le ragioni e sono d'accordo con loro. Tuttavia, nella Sezione 4.4.1.2 di Bjarne Stroustrup, in here si eredita da std :: vector per aggiungere il controllo di intervallo.Ereditato da std :: vector

è che un caso speciale, o semplicemente qualcosa che è ok in questo contesto o qualcosa che in realtà non dovrebbe essere facendo: P

+9

Bjarne Stroustrup è un caso speciale. – Chowlett

+0

Penso che sia il modo più semplice per dimostrare i principi che sta descrivendo, senza dover impostare una classe di esempio complicata. –

risposta

3

penso this answer risponde perfettamente alla tua domanda.

Non è impossibile ereditare da std::vector, ma probabilmente sarebbe molto limitato (a causa di nessun distruttore virtuale), abbastanza confondendo con gli altri ed estendendo per composizione sarebbe comunque migliore/più facile/più gestibile rispetto all'eredità.

Forse Stroustrup voleva semplicemente mostrare che è fattibile, ma non necessariamente implica che lo suggerisca.

+0

Questo ha senso, e non è affatto probabile che si usi il polimorfismo del vettore in ogni caso. – jcoder

+1

Intendi [questa risposta] (http://stackoverflow.com/a/7302165/743214), vero? –

+2

@jcoder notano anche che è possibile ottenere molto, senza la maggior parte delle insidie, utilizzando l'ereditarietà privata. – juanchopanza