Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Lista dinamica template
Forum - C/C++ - Lista dinamica template

Avatar
JackDaniels (Normal User)
Newbie


Messaggi: 18
Iscritto: 08/10/2007

Segnala al moderatore
Postato alle 8:56
Venerdì, 19/10/2007
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:

PM Quote
Avatar
Reese (Ex-Member)
Pro


Messaggi: 179
Iscritto: 09/08/2006

Segnala al moderatore
Postato alle 11:29
Lunedì, 22/10/2007
Cosa intendi per visualizzarli? Stamparli sullo schermo?

PM Quote
Avatar
JackDaniels (Normal User)
Newbie


Messaggi: 18
Iscritto: 08/10/2007

Segnala al moderatore
Postato alle 12:12
Martedì, 23/10/2007
Testo quotato

Postato originariamente da Reese:

Cosa intendi per visualizzarli? Stamparli sullo schermo?



Si certo...anche sono stamparli a video...8-|

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 14:36
Martedì, 23/10/2007
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: https://piero.dev
PM Quote
Avatar
JackDaniels (Normal User)
Newbie


Messaggi: 18
Iscritto: 08/10/2007

Segnala al moderatore
Postato alle 19:31
Martedì, 23/10/2007
Testo quotato

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:

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 17:16
Mercoledì, 24/10/2007
Testo quotato

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++

  1. // ...
  2. virtual void print(){
  3.   // code here
  4. }
  5. // ...



Quando erediti da essa dovrai ridichiarare il metodo print adattandolo alla struttura del tuo oggetto.


Il mio blog: https://piero.dev
PM Quote
Avatar
JackDaniels (Normal User)
Newbie


Messaggi: 18
Iscritto: 08/10/2007

Segnala al moderatore
Postato alle 10:16
Venerdì, 26/10/2007
Testo quotato

Postato originariamente da pierotofy:

Testo quotato

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++

  1. // ...
  2. virtual void print(){
  3.   // code here
  4. }
  5. // ...



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:

PM Quote