Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Salve a tutti,
sto programmando una lista bidirezionale dinamica che mi possa gestire qualsiasi tipo di dato dunque sto usando le classi template.
Ho cominciato a scrivere il codice. Ho creato:
* Una classe Mialista che contiene i metodi per la gestione della lista
* Una classe Mionodo che mi serve per gestire i nodi
* I nodi avranno oltre ai puntatori ai nodi precedente e successivo anche un campo dati nel quale potranno essere contenuti dati di qualsiasi tipo; supponiamo di voler inserire oggetti di una qualsiasi classe.
Uno dei metodi della classe Mialista è VisualizzaLista che mi deve permettere di visualizzare appunto il contenuto dei nodi. Ma se il contenuto dei nodi può essere un oggetto di qualsiasi tipo come faccio a creare un metodo generico che me li visualizzi?
Crei una classe base MioObject che esponga un metodo Print.
Fai in modo che tutti gli oggetti contenuti all'interno della lista ereditino da MioObject e riscrivano il metodo Print in base all'output che devono restituire.
A quel punto quando estrai un oggetto dalla lista esegui un cast esplicito su di esso trasformandolo in tipo MioObject e a quel punto richiami il metodo Print.
Almeno io farei così se ci sono soluzioni migliori correggetemi.
Crei una classe base MioObject che esponga un metodo Print.
Fai in modo che tutti gli oggetti contenuti all'interno della lista ereditino da MioObject e riscrivano il metodo Print in base all'output che devono restituire.
A quel punto quando estrai un oggetto dalla lista esegui un cast esplicito su di esso trasformandolo in tipo MioObject e a quel punto richiami il metodo Print.
Almeno io farei così se ci sono soluzioni migliori correggetemi.
Si condivido il metodo e confesso che nn ci avevo pensato ma non riesco a capire perchè mi dici di ereditare il metodo non sarebbe sufficiente fare solo il cast? E poi procedendo in questo modo tutte le eventuali classi che andrei a creare dovrebbero essere derivate da MioObject no?
Anche procedendo cosi però resta un problema di fondo: se print in MyObject è modellata su MyObject e funziona in un certo modo io sono poi condizionato a dover creare classi che rispettino la stessa struttura di MyObject altrimenti il mio bel metodo print va a farsi friggere...
Per ora sto cercando di risolvere il problema creando un metodo print in ogni nuova classe e richiamarlo poi in maniera opportuna dal metodo visualizzaLista implementato nella classe lista. Non so ancora come fare di preciso ma ci sto lavorando...ovviamente se vi vengono nuove idee proponete pure e grazie per il vostro interessamento.
Postato originariamente da JackDaniels: E poi procedendo in questo modo tutte le eventuali classi che andrei a creare dovrebbero essere derivate da MioObject no?
Precisamente.
Testo quotato
Si condivido il metodo e confesso che nn ci avevo pensato ma non riesco a capire perchè mi dici di ereditare il metodo non sarebbe sufficiente fare solo il cast?
...
Anche procedendo cosi però resta un problema di fondo: se print in MyObject è modellata su MyObject e funziona in un certo modo io sono poi condizionato a dover creare classi che rispettino la stessa struttura di MyObject altrimenti il mio bel metodo print va a farsi friggere...
Proprio per questo devi ridefinirlo come ti ho scritto precedentemente. Nella classe MyObject dichiara la funzione print in maniera simile a questa:
Codice sorgente - presumibilmente C/C++
// ...
virtual void print(){
// code here
}
// ...
Quando erediti da essa dovrai ridichiarare il metodo print adattandolo alla struttura del tuo oggetto.
Postato originariamente da JackDaniels: E poi procedendo in questo modo tutte le eventuali classi che andrei a creare dovrebbero essere derivate da MioObject no?
Precisamente.
Testo quotato
Si condivido il metodo e confesso che nn ci avevo pensato ma non riesco a capire perchè mi dici di ereditare il metodo non sarebbe sufficiente fare solo il cast?
...
Anche procedendo cosi però resta un problema di fondo: se print in MyObject è modellata su MyObject e funziona in un certo modo io sono poi condizionato a dover creare classi che rispettino la stessa struttura di MyObject altrimenti il mio bel metodo print va a farsi friggere...
Proprio per questo devi ridefinirlo come ti ho scritto precedentemente. Nella classe MyObject dichiara la funzione print in maniera simile a questa:
Codice sorgente - presumibilmente C/C++
// ...
virtual void print(){
// code here
}
// ...
Quando erediti da essa dovrai ridichiarare il metodo print adattandolo alla struttura del tuo oggetto.
Grazie Piero credo che seguirò il tuo consiglio anche perchè la strada che avevo intrapreso è simile ma ha una logica meno lineare.