Oppure

Loading
19/10/07 6:56
JackDaniels
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?

Spero di essere stato chiaro:-?:k:
aaa
22/10/07 9:29
Reese
Cosa intendi per visualizzarli? Stamparli sullo schermo?
aaa
23/10/07 10:12
JackDaniels
Postato originariamente da Reese:

Cosa intendi per visualizzarli? Stamparli sullo schermo?


Si certo...anche sono stamparli a video...8-|
aaa
23/10/07 12:36
pierotofy
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.
Il mio blog: piero.dev
23/10/07 17:31
JackDaniels
Postato originariamente da pierotofy:

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...:asd::asd:

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.:k:
aaa
24/10/07 15:16
pierotofy
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.

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:

// ...
virtual void print(){
  // code here
}
// ...


Quando erediti da essa dovrai ridichiarare il metodo print adattandolo alla struttura del tuo oggetto.
Il mio blog: piero.dev
26/10/07 8:16
JackDaniels
Postato originariamente da pierotofy:

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.

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:

// ...
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.
:k:
aaa