Newsgroup: it.comp.lang.c++
Titolo: Ereditarietà

Ho una classe lista, nessun metodo virtuale, tanti metodi, costruttori e
distruttore.
Voglio creare una classe stack.
Questa classe usera la stessa struttura dati della lista e avrà bisogno di
un sottoinsieme dei metodi della lista (ma non tutti) più forse dei metodi
aggiuntivi.
Vorrei fare in modo di riutilizzare il codice scritto per lista, apportando
eventuali modifiche minime alla classe base.
Vorrei anche che i metodi comuni alle due classi abbiano lo stesso nome.
Non posso usare l'ereditarietà pubblica perchè stack avrebbe dei metodi che
non deve avere (tipo erase o insert).
Ho pensato di usare l'ereditarietà privata e dichiarare le funzioni comuni
alle due classi come virtuali. Dopodiche ridefinirle tutte in modo che
queste si limitino a richiamare le stesse medesime funzioni della classe
base.
Esempio
nella classe template list:
virtual void push_back(const value_type& gargamella) {......}
nella classe template stack: private list
virtual void push_back(const value_type& puffo_barlocco)
{list::push_back(puffo_barlocco);}
nel main
stack<int> tolkien;
tolkien.push_back(3);
Si può fare? E' efficiente? E' elegante? Ci sono soluzioni migliori?

Si può fare? E' efficiente? E' elegante? Ci sono soluzioni migliori?
se vuoi proprio reinventare la ruota da un occhio a come fa la stessa
cosa la libreria standard.
sbirish

 wrote in message
juplbv8i91oedmc6q...@4ax.com...

;-) senza dubbio std::list sarebbe la scelta migliore, il problema è che
"devo" reinventare la ruota (e non solo le liste ma anche stringhe, date,
vettori e forse pure matrici, alberi e grafi... tutte nello loro bella
classe) perchè fra un mesetto ho fondamenti 2 e il prof non accetta le STL
(ma tuttavia ha messo a disposizione le sue bellissime liste, bellissime per
modo di dire, scommetterei che se le compilo non vanno, oltre a fornire una
quantità ridicola di metodi ed a essere prive di un iteratore decente).
Mi sembra che le STL VC++6 creino il codice exnovo per ogni contenitore, i
contenitori list vector queue deque e stack non sono derivate. Però sono
fortemente templatizzate e recuperare i vari pezzi nelle varie intestazioni
non è facile, probabilmente m'è sfuggito qualcosa.

 non è facile, probabilmente m'è sfuggito qualcosa.
Non usare le STL di VC++ 6. Sono bacate, tremendamente bacate.

 std::stack
si, ok, hai ragione ma dimentichi che TUTTI quando iniziano a programmare
(magari non per professione ;-) amano reinventare la ruota e scoprire e
provare a fare le cose che si imparano sui libri di strutture dati ed
algoritmi.
Io a mio tempo ho riscritto in C l'intero Cormen-Leiserson-Rivest.... potrei
quasi vendere la versione con codice in C, visto che quella in commercio usa
solo uno pseudocode ;-)
Tommy


:O quanti ricordi il Cormen...

 Non usare le STL di VC++ 6. Sono bacate, tremendamente bacate.
Puoi spiegare meglio questo punto? Sarei interessato a conoscere i limiti
delle STL implementate dalla Microsoft con quella versione.
Ciao!
Z.


Posso raccontarti la mia esperienza. Ho lavorato su un simulatore di un
microprocessore scritto in C++. Questo simulatore era stato costruito sotto
ambiente Linux con il gcc e faceva un forte uso delle STL. Quando e' stato
fatto il porting sotto windows con VC++6 ci sono stati molti problemi in
fase di deallocazione di vettori, in particolare crashavano alcuni thread
necessari per il debuging. Analizzando il codice ci siamo accorti che il
crash avveniva all'interno del codice delle STL.
Per la cronaca mi hanno detto che le librerie STL successive sono state
migliorate, ma non ho provato.
In Internet c'e' una buona quantita' di letteratura riguardo i bachi delle
STL sotto VC++6.
Ciao
Emanuele

 STL sotto VC++6.
Hai qualche stringa da googolare?
Ciao!
-- 
---
*************** | Have you ever retired a human by mystake?
*** Azathot *** |
*************** | To contact me, ask me gently. Thanks.

 queste classi e non su un uso basato su classi gia' esistenti.
Il corso non si basa sull'implementazioni delle liste ma
sull'implementazioni delle classi in genere (ereditarietà, operatori,
virtual eccetera).
Quello che non mi spiego è per quale motivo non lasci usare le librerie
standard però permetta di usare le sue librerie.
Mi spiego, io me le sto riscrivendo perchè la cosa mi diverte ma lo studente
medio (quello con un po' di intelligenza) non ha nessun bisogno di conoscere
le liste, le stringhe eccetera, può semplicemente ignorare tutto ed usare le
liste che il prof ha messo a disposizione. Il compito d'esame in se per se
non richiede la conoscenza delle classi lista ma per la sua soluzione ci
sarà da usare tali classi (già pronte altrimenti non basta il tempo) per
memorizzare degli oggetti che cambiano di volta in volta (generalmente una
gerarchia di 3 o 4 classi molto semplici).
Pazienza.

 Io a mio tempo ho riscritto in C l'intero Cormen-Leiserson-Rivest....
potrei
!!!!
io devo ancora trovare il tempo per finire di leggerlo.....

Hai qualche stringa da googolare?
Purtroppo non ho un collegamento ad internet dove sono adesso, solo alle
news, ad ogni modo l'argomento credo fosse stato preso su
comp.lang.c++.moderated
Ciao e complimenti per il metodo, se le cose stanno cosi' non vedo di meglio
da consigliarti.

 meglio da consigliarti.
In effetti, io mi lamento pochissimo delle STL, e non è per la loro 
"robustezza", piuttosto è per via del pessimo stile di scrittura, che le 
rende indecifrabili, qualche volta. Soprattutt nelle sessioni di debug.
