Originariamente inviato da MItaly
Se vuoi usare un approccio ad ereditarietà a container e algoritmi, devono essere i container ad ereditare dagli algoritmi, i quali tuttavia devono poter sapere "in anticipo" (tramite ereditarietà da una classe base astratta) quali saranno i metodi che le classi derivate impiegheranno per farle accedere ai dati.
Effettivamente avevo sentito parlare di questo appproccio "inverso".

Cioè la superclasse sarà "ordinamento", che però deve avere almeno in maniera "virtuale" delle classi di leggi e scrivi, che poi andranno ad essere implementate materialmente nelle classi figlio e varieranno da struttura dati a struttura dati, giusto?

Cioè io dichiaro ordinamento come superclasse che usa poi un'altra classe per leggere e scrivere.

Ma con la classe virtuale, ai fini dell'astrazione, come posso fare a dire in un secondo momento che quel leggi e scrivi si riferiscono ad una lista anzichè ad un array anzichè a non so che altro?

Se scrivessi superclasse Ordinamento che usa i metodi Matrice::Leggi e Matrice::Scrivi, poi dopo, dovrò a forza usare una matrice. Se volessi invece usare dei metodi "generali" e poi solo in un secondo momento dichiararli come "lettura di matrici" o di "liste"? O addirittura scegliere se si avvera una determinata condizione usa una lista, altrimenti una matrice?

Per capire un pò meglio all'atto pratico la cosa, sempre che non ti è troppo dispersivo in termini di tempo, ti andrebbe di dichiararmi in maniera pratica una classe ordinamento, che usa i metodi di una classe virtuale leggi e scrivi, e poi dichiarati in un secondo momento questa classe virtuale in modo da poter decidere se usare una lista o un array? Giusto perchè magari con un pò di codice alla mano su cui discutere magari mi riesce meglio capire