mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c++
Titolo: una lista generica

Salve a tutti,
devo scegliere il tipo di implementazione per realizzare una lista di
elementi.
il dubbio č se considerare il template oppure una classe base
astratta...
che differenza comporta?
personalmente mi sembra di ottenere lo stesso risultato, ma allora da
cosa deve dipendere la scelta?
- con classe base astratta
class CClasseAstratta
{
...
public:
virtual operator<(CClasseAstratta&);
virtual operator>(CClasseAstratta&);
virtual operator==(CClasseAstratta&);
};
class CDato : CClasseAstratta
{
...
public:
virtual operator<(CClasseAstratta&);
virtual operator>(CClasseAstratta&);
virtual operator==(CClasseAstratta&);
};
- con template
list <CDato> generico;
grazie duido

 che differenza comporta?
Che col template scrivi una volta e scrivi per sempre :)
Domanda:
che cos'ha std::list che non va?
-- 
Gerolamo 

 che cos'ha std::list che non va?
E' gia' bella e pronta, ha tante funzioni interessanti, e ti toglie pure 
il "divertimento" del debugging ;-)

grazie ad entrambi
bye duido

Newsgroup: it.comp.lang.c++
Titolo: Offerta Personal computer !!!

Salve , vorrei riportarvi alcuni prezzi di pc completi che potete ordinare e
visionare sul sito 
http://www.millenniuminformatica.com
                        OFFERTE !!!
Celeron 400 Mhz, Sdram 64 MB 100 Mhz , Scheda Video TNT II 32Mb AGP 4x , SB
16 , modem 56K v90 , Monitor 15" , casse 160 Watt , tastiera , mouse
tappetino , a sole lire 1.699.000
Amd K6 II 450 Mhz, ram 64 MB 100 Mhz , tnt 2 riva 32 MB AGP , SB 16, Modem
56K v90, Monitor 17" Casse 200 Watt, Tastiera Mouse al prezzo offerta di
lire
1.799.000 iva e trasporto inclusa con garanzia di 12 mesi su tutti i
prodotti.
PIII 700 Mhz , 128 Mb , Riva TNT II 32 Mb , SB 128 , HDD 20.1 GB , Monitor
17" , Modem 56K v90 , lexmark z11 colore , lettore cd 48x , tastiera, mouse
, tappetino, al prezzo offerta di £ 1.999.000 iva e trasporto inclusa con
garanzia di 12 mesi su tutti i prodotti.
Per collegamenti multipli tra + pc in collegamento ( ethernet ) e
condividendo ( Internet )
HUB UNEX 10/100 8 Porte RJ45 £ 299.000
HUB 3COM USROBOTICS 10/100 8 Porte £ 399.000
Stampante Lexmark Z11 a getto d'inchiostro b.n./colore al prezzo offerta di
£ 149.000 Iva inclusa.

Il tuo messaggio non e' solo fuori tema rispetto all'argomento del
newsgroup, ma viola le norme di comportamento relative ai newsgroup,
poiche' tratta di offerte commerciali.
Ti informo che ti ho segnalato al tuo provider.
Nicola Musatti
Newsgroup: it.comp.lang.c++
Titolo: Espressioni algebriche

Come posso far parserare e risolvere expressioni alebriche come:
5 * (3a + 4a) + 4a * (x+1)(x-1)
Tnk
-- 
Kleidemos
C++ Programmer
kleidemo...@altervista.org
http://kleidemos.altervista.org/

 5 * (3a + 4a) + 4a * (x+1)(x-1)
Scrivendo un parser? ;-)
GIYF: "Bison++".
-- 
---
*************** | Have you ever retired a human by mystake?
*** Azathot *** |
*************** | To contact me, ask me gently. Thanks.

Ma come posso iniziare??
Cioe come valutare la prioritò delle parentesi???


 Cioe come valutare la prioritò delle parentesi???
Se leggi le sue istruzioni, vedrai che fa tutto lui (purché opportunamente 
predisposto). Descrizione di "Bison++": "Compatible with bison but with C++ 
support. Bison is a general-purpose parser generator that converts a 
grammar description for an LALR (BNF-like) context free grammar into a 
C/C++ program to parse that grammar. Once you are proficient with bison++ 
you can generate a wide range of language parsers, from those used in 
simple desk calculators to complex programming languages. "
Ciao!


 Ma come posso iniziare??
Allora, se hai intenzione di fare esperimenti fa pure, ma se vuoi 
mettere mano a strumenti come flex ( flexx++ per codice c++ ) devi 
studiare. Noni puoi fare cose più 'leggere'....oppure ne scarichi 
qualcuno già fatto e te lo guardi...
j0k3r

 5 * (3a + 4a) + 4a * (x+1)(x-1)
http://www.cs.vu.nl/~dick/PTAPG.html
http://spirit.sourceforge.net/
Ciao,
Nicola

 parserare
mah..?!
Alternativamente puoi seguire i consigli degli altri post che sono piu'
pratici.
Tuttavia anche per utilizzare i tool che ti consigliano dovrai
studiare...
Nella lista dei libri che ti ho consigliato c'e' programming language
pragmatics che spiega i recursive descent parsers, le grammatiche, i
tools etc....
Inoltre molti libri di introduzione al C++ insegnano come scrivere
recursive descent parsers per il parsing di espressioni algebriche.
Ad esempio, ora mi viene in mente solo, Beginning Visual C++ di Ivor
Horton e la guida completa di Schildt (che pero' non ti consiglio). Ma
ce ne sono parecchi altri.
Tommy
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Newsgroup: it.comp.lang.c++
Titolo: Liste, alberi, code

Conoscete qualche risorsa on-line che mi permetta di studiare la teoria
degli argomenti del subject?? Grazie a tutti.
Fabio


Un tutorialino e' qui:
http://warrior-101.tripod.com/dstut/dstut.htm
Prova questo:
http://www.mathtools.net/C++/Algorithms_and_Data_structures/
Qui viene spiegato un po', solo che poi e' implementato in Java:
http://www.cogs.susx.ac.uk/local/teach/dats/notes/html/notes.html
Ma e' vero che si trovano piu' che altro libri.
Maurus
Newsgroup: it.comp.lang.c++
Titolo: [semi-OT] file packer

ciao a tutti!
esiste in giro un programma free in grado di raggruppare il mio 
programma con dll annesse in un unico eseguibile?
Nel particolare, ho il programma c++ compilato, qualche dll di 
accompagnamento e qualche file di testo contenti i miei shader, e avrei 
bisogno di un'utility in grado di impacchettare tutto questo in un unico 
eseguibile. Esiste? Free possibilmente...
grazie!
-- 
Shya

Ciao,
Questo newsgroup si occupa del linguaggio di programmazione C++. Per
questo non e' il posto piu' adatto per porre domande come la tua. Ti
invito a cercare un gruppo il cui argomento sia piu' rispondente alle
tue esigenze. Avrai maggior probabilita' di risolvere il tuo problema
ed
eviterai perdite di tempo a chi consulta it.comp.lang.c++ .
Grazie,
Nicola Musatti

shya wrote:

Si e no. Primo, se utilisi libraries statiche, non ci son più
DLL dopo; tutto è nell eseguibile. (Non capisco l'interessa
delle DLL sino di potere separarle dell'esequibile.) E per il
testo, è possibile convertirlo in C++, con script con sed o awk
(CygWin, sotto Windows), e allora linkarlo statichemente.
--
James Kanze                                           GABI Software
Conseils en informatique orientée objet/
                   Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, 
+33 (0)1 30 23 00 34

 (CygWin, sotto Windows), e allora linkarlo statichemente.
ecco, qui non ti ho capito. Cosa intendi per il testo ? Il testo 
non si presta ad essere integrato direttamente nel programma in 
codice di alto livello (come literals inline) ? O se un po' 
corposo, come risorse stringa compilabili con il resource editor  ?
ciao
Soviet_Mario


 resource editor ?
Depende de quello che vuoi. Se ha un file con testo come:
    abc = xyz
    param1 = 1
    param2 = 2
    ...
è facile convertirlo in:
    char info[] =
        "abc = xyz\n"
        "param1 = 1\n"
        "param2 = 2\n"
        ...
        ;
Dopo, puoi fare con questo che vuoi. Anche se devono viene
modificato, in modo persistente, o devono trovarsi in un file,
alfine di servir a delle funzioni della library che aspettono un
file, è possibile a l'inizio del programma a vedere se il file
esista, e se no, crearlo e ci copiare info. È un modo un po
artificiale a fare che le cose comme files di configurazione se
trova nell'eseguibile.

Newsgroup: it.comp.lang.c++
Titolo: Contare gli spazi

Dovrei contare gli spazi contenuti in una stringa e avrei pensato a questa
funz:
int Spazi(string &st)
{
    int spazi_cont;
    string::iterator it=st.begin();
    for( ; it != st.end(); it++)
    {
        if( st.find(" ") != string::npos )
        {
        	spazi_cont++;
        }
        if( st.find("\0") != string::npos )
        {
                break;
        }
    }
    return spazi_cont;
}
Ma mi trova 30000 spazi
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
Ciao da Kleidemos
C++ Programmer
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.

 Programmer
Ne dubito...
Cosa usi a fare la "find" in un ciclo su tutti i caratteri della 
stringa?!?! 
-- 
Luc.


Perchč tutte queste complicazioni? Ti basta scorrere la stringa un
carattere per volta e vedere se č uno spazio...
int Spazi(string &st){
        int spazi_cont=0;
        for (unsigned int i=0;i<st.size();++i)
                if (st[i]==' ')
                        spazi_cont++;
        return spazi_cont;
}
La soluzione piů semplice č sempre la migliore...
Newsgroup: it.comp.lang.c++
Titolo: fstream,file

Io dovrei fare degli esercizi tipo confrontare file,vedere quante volte si
ripete una parola in un file,ecc..
La limitazione è questa:non si devono usare i puntatori da nessuna parte.Sui
libri che io ho invece i file(apertura e chiusura) sono trattati
pressuponendo la conoscenza dei puntatori.Chi mi può consigliare qualche
buon testo,o sito dove i file sono spiegati anche nella maniera che devo
usare io?
Grazie

 writes:

Nel C standard i file streams si possono effettivamente maneggiare
solo attraverso puntatori a strutture FILE (il cui contenuto e'
implementation dependent); ma questo newsgroup e' dedicato al C++...
Nell'eventualita' che il tuo compito debba essere svolto in C++, prova
con qualcosa del tipo:
#include <iostream>   // Puo' darsi che ci vogliano entrambi,
#include <fstream>    //   cosi' come puo' darsi che basti uno solo.
...
std::ifstream ifile("Nome_del_file");
if (ifile) {
  // Leggi e processa lo stream
} else {
  // Errore
  std::cerr << "Non posso accedere al file\n";
}
"Qualche buon testo"?  Qualunque testo di C++ che parli di I/O e di
streams.  Guarda nel newsgroup gli altri threads; ce n'e' uno che
riguarda i testi consigliati.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it

 usare io?
Qualunque testo che tratti bene la libreria standard del
linguaggio C++ dovrebbe mostrarti come usare iostream
e string per realizzare semplicemente questi compiti.  Ad
esempio, il mio preferito e` il Lippmann e Lajoie, C++
Primer, 3a edizione, Addison-Wesley.  Uno scaricabile
gratuitamente dalla rete e` "Thinking in C++", 2a ed,
di Bruce Eckel (
www.BruceEckel.com
), ed e` pure un
ottimo testo.
I puntatori sono inevitabili per usare i file in C (in quanto
tutto l'i/o standard e` definito in termini di "FILE*") e in
pratica anche per gestire stringhe, sempre in C.  Immagino
che lo scopo dell'esercizio sia obbligare gli studenti a
muoversi dagli anni '70 (quando furono progettate queste
strutture del C) agli anni '90 (quando lo furono quelle del
C++ che servono a scopi simili), e non mi sento che di
applaudire...:-).
Alex
Newsgroup: it.comp.lang.c++
Titolo: Quale compilatore?

Ho incontrato problemi compilando piccoli programmi tratti dal testo
Thinking C++ di Eckel sia con il Borland Turbo C++ 3.0 che con il MSVC++ 4.0
dovuti alla non compatibilità con le librerie standard.
Vorrei  dunque procurarmi un compilatore "al passo con i tempi".
Cercando informazioni a proposito del VC++ 6.0 ho individuato le seguenti
alternative:
- acquistare VC++ 6.0 EDU a circa 130-140 mila lire
-sostenere una spesa maggiore (c.a. 250 mila) per la Licenza Studente
strumenti di sviluppo
In particolare mi interesserebbe sapere:
1)La versione contenuta nel pacchetto in licenza è la stessa(e anche qualora
non lo fosse supporta lo standard)? Se non lo è quale è la più adatta?
2)Vale la pena spendere oltre 100 mila lire  in più per utilizzare solo uno
dei prodotti contenuti nel pacchetto in licenza(o dovrei forse considerarlo
come un investimento per il futuro)?
3)In cosa differisce il VC++ 6.0 EDU dalle altre versioni Std e Pro tra
l'altro molto più costose?
4)Il pacchetto del VC++ 6.0 è comprensivo di manualistica oppure no?
Partendo dal presupposto che sto iniziando il C++ standard per poi muovermi
in un secondo momento verso la programmazione sotto Windows quale prodotto
mi consigliate?
Grazie a chiunque voglia offrirmi qualche consiglio.
Rispondete via e-mail se possibile.
taglia...@mclink.it

4)Il pacchetto del VC++ 6.0 è comprensivo di manualistica oppure no?
No.  Almeno, nella versione std il manuale e' di poche pagine e pressoche'
inutile (almeno ora, magari tra un po' lo studio meglio). In compenso ti
danno due CD con 1 giga di documentazione un po' difficile da consultare ma
senz'altro utile (MSDN)
Marco

Ti posso dire (perchè l'ho fatto io) che con la licenza studente strumenti
di sviluppo ti danno il Visual Studio 6 (VB, VC++, VFoxPro, VInterDev), il
VJ++ in un CD a parte, l'MSDN Library (2 CD di documentazione) e se spulci
bene nei CD trovi l'InstallShield x VC++6 e gli esempi dei vari linguaggi.
Questi ultimi due infatti non te li installa automaticamente, ogni
linguaggio ha la sua procedura e per il Vc++ devi cercarteli e copiarteli tu
dal CD. Se ne vale la pena? Ne vale la pena!! (a meno che tu non opti per la
Borland, che è un altro discorso).
Ciao, Giuseppe

dal CD.
Io ho la versione std, ma l'installSHIELD non l'ho trovato :(
Non e' che vale solo per la versione studenti?
Marco

Non e' che vale solo per la versione studenti?
Con la licenza studente ti danno la versione Professional del Visual Studio.
Lě trovi l'InstallSHIELD.....
Ciao, Giuseppe

Newsgroup: it.comp.lang.c++
Titolo: Aiuto - conoscere lo stato della stampante

Aiutatemi, come posso fare per conoscere lo
stato della stampante.
Grazie infinite


Newsgroup: it.comp.lang.c++
Titolo: Media di numeri casuali

> int media = lancio[1] + lancio[2] + lancio[3] /3;
Forse non guasta mettere le parentesi... inoltre gli indici degli array
partono da 0.
int media = (lancio[0] + lancio[1] + lancio[2] ) / 3;
Comunque non era necessario memorizzarsi tutti i numeri, bastava calcolare
man mano la somma e alla fine dividere per N.
Bye.

 ha scritto nel messaggio
news:OADmb.67589$e6.24...@twister2.libero.it...


Newsgroup: it.comp.lang.c++
Titolo: Clrscr();

Chi mi saprebbe indicare come implementare la funzione clrscr(); in ANSI C?
So che consiste nella stampa di una qualche sequenza di escape, ma non
saprei quale.
(scrivo in ambiente Linux, non so se puň servire...)
Grazie a tutti.

La risposta corta e' che non si puo' (in maniera portabile).  La
risposta lunga e' il punto 19.4 della FAQ list di comp.lang.c, che
riporto qui sotto:
19.4:   How can I clear the screen?
        How can I print things in inverse video?
        How can I move the cursor to a specific x, y position?
 
A:      Such things depend on the terminal type (or display) you're
        using.  You will have to use a library such as termcap,
        terminfo, or curses, or some system-specific routines, to
        perform these operations.
 
        For clearing the screen, a halfway portable solution is to print
        a form-feed character ('\f'), which will cause some displays to
        clear.  Even more portable might be to print enough newlines to
        scroll everything away.  As a last resort, you could use
        system() (see question 19.27) to invoke an operating system
        clear-screen command.
 
        References: PCS Sec. 5.1.4 pp. 54-60, Sec. 5.1.5 pp. 60-62.
-- 
Maurizio Loreti                      
http://wwwcdf.pd.infn.it/~loreti/mlo.html
Un. of Padova, Dept. of Physics - Padova, Italy          
lor...@padova.infn.it
Newsgroup: it.comp.lang.c++
Titolo: namespace, using e typedef

che differenza c'è tra l'utilizzo di using e quello di typedef per 
"portare" un nome da un namespace ad un'altro?
(A parte che con typedef posso anche cambiare nome, e con using no)
Es.
namespace pippo
{
   class c1
   {
   };
}
namespace pluto
{
   using pippo::c1;
}
namespace paperino
{
   typedef pippo::c1 c1;
}

GM ha scritto:

Trovata una differenza:
se aggiungo:
void test()
{
   using namespace pippo;
   using mamespace pluto;
   c1 test;
}
funziona
ma se nmetto
void test()
{
   using namespace pippo;
   using mamespace paperino;
   c1 test;
}
non compila con error C2872: 'c1' : ambiguous symbol

 (A parte che con typedef posso anche cambiare nome, e con using no)
In breve, typedef è malvagio e using no.
Personalmente, odio i codici sorgente che mi sono trovato a leggere
contenenti typedef.
Typedef rende la vita di chi scrive il codice più facile perché invece di
scrivere cose come «map<int,vector<*Coordinates<double, double> > >»
possono scrivere «dati», ma così facendo chi leggerà il codice dopo rimarrà
a chiedersi dove cavolo sia la documentazione del tipo «dati», salvo
trovarlo (dopo qualche mezzora di ricerca) in una definizione typedef in un
file d'intestazione infognato da qualche parte, che rimanda magari ad un
altro typedef e così via.
Il mio consiglio è che quando il tipo di dati diventa così ingombrante da
dare fastidio nella digitazione è un buon segnale che è ora di implementare
una classe apposita.
Using, invece, non cambia i nomi e non dà questi problemi. Non sono uno
storico del C++ ma credo che sia questa una delle ragioni per cui sia stato
introdotto, altrimenti avrebbero potuto limitarsi a usare typedef, che
invece risale al C (e alle abitudini che, portate dal C al C++, diventano
cattive abitudini).
Ciao,
-Federico
Newsgroup: it.comp.lang.c++
Titolo: Il compilatore può inventarsi gli errori?

    Ariciao a tutti!!!
Compilando cn il dev 5 beta un sorgente il compilatore mi segnala una marea
di parse error,
la cosa strana, è che sono sicuro al 99,99% (che nn esiste) che nn c siano
quegli errori...
(es. line24: parse error before "::"
24:  classe::classe ( int arg );
oppure
line59: object "classe" not declared
//invece dichiarato sulla linea 23!
etc...)
ho provato a reinstallare il dev, idem...
premetto che lo uso da un mese, mai nessun problema.
è possibile che sia il compilatore, o sono io che devo ristudiarmi la
teoria?
Ciao ciao,
Daniele

 quegli errori...
Magari posta anche una parte del codice...
-- 
Andrea Bergia - studente          Linux Registred User #281550
Per favore non mandatemi allegati in Word o PowerPoint.
Si veda 
http://www.fsf.org/philosophy/no-word-attachments.html

Anche io uso Dev C++ Beta5 e non ho problemi.
Ma ho sentito che i problemi sorgono se installi a ver 5 sopra
la 4 senza averla disinstallata.
--
Emanuele Di Saverio
---------------------------------------------
Remove NOSPAM manually for reply
Scusate le vaccate se  ne dico!
"** !! GnaSKuRu !! **" <gnask...@SPAMlibero.it> wrote in message
news:apxA9.26727


 etc...)
Ha tutta l'idea di un errore alle righe 23-24 invece...
Più facilmente alla 23.
Posta un po' di codice in quell'intorno.
Magari ti manca un typename o qualcosa del genere e il compilatore
non riesce a interpretare correttamente quel che scrivi.
-- 
Gerolamo

"** !! GnaSKuRu !! **" <gnask...@SPAMlibero.it> ha scritto nel messaggio
news:apxA9.26727$Zn2.7...@twister1.libero.it...

Se posti il codice ti diamo una mano.
Intanto ti vorrei dare un consiglio: prima di gridare che c'e' un errore in
un compilatore, che e' un programma testato in continuazione da tutti i suoi
utilizzatori e dai produttori stessi e quindi un errore e' molto (ma molto
molto!) improbabile, pensaci bene poi riguardi il codice e infine se non ti
capaciti dell'errore porti il codice (o il frammento interessato) su un
altro compilatore, se  questo non da problemi puoi dire che il compilatore
ha un baco.
Attenzione: talvolta quelli che sembrano bachi sono non attinenze allo
standard di norma documentate dal produttore del compilatore: la gnu ad
esempio aveva introdotto delle facility nel suo compilatore (gcc) prima che
venissero standardizzate nel C99
ciao,
Nids

 teoria?
Non è che banalmente compili C++ come C?
Comunque puoi renistallare anche 50 volte Dev-C++, tanto non è lui il 
compilatore.
-- 
---
In silenzio anche un idiota sembra intelligente. Ma non c'è problema,
l'idiota vuol sempre dire la sua.
Newsgroup: it.comp.lang.c++
Titolo: la struct e' uscita, ma dove sta ?

Ciao a tutti,
per favore toglietemi questo dubbio.
Se ho un programma del genere:
typedef struct {
  /bla bla bla/
} TStruct;
TStruct getStruct() {
  TStruct temp;
  /bla bla bla/
  return temp;
}
void chiamante() {
  const TStruct & locvar_ok = getStruct();
  TStruct * p_locvar_boo = &(getStruct());
  // warning: taking address of temporary
  TStruct & locvar_boo = *p_locvar_boo;
}
la variabile "locvar_ok" è sempre _allocata_ sulla zona
dello stack assegnata alla funzione "chiamante", no ?
Quindi è equivalente ad una variabile locale... (?)
...ma alla riga subito sotto, il compilatore da'
un warning che fa pensare al contrario !
Perché (con il "const") locvar_ok è Ok ?
-- 
Teòria

 Perché (con il "const") locvar_ok è Ok ?
Normalmente il lifetime di un oggetto temporaneo è limitato alla
full-expression che contiene il punto in cui esso viene instanziato. Ci
sono due situazioni in cui il lifetime del temporaneo si estende oltre.  
Una di queste è quando il temporaneo viene "legato" (bind) a un
const-reference. In questo caso, il lifetime del temporaneo coincide con
quello del reference. Quindi:
   const TStruct & locvar_ok = getStruct();
In questo caso, il temporaneo restituito da getStruct() viene distrutto
quando locvar_ok esce di scope.
 TStruct * p_locvar_boo = &(getStruct());
In questo caso il temporaneo restituito da getStruct() viene distrutto al
termine dell'espressione e il valore assegnato p_locvar_boo non può più
essere considerato un puntatore valido.
Max

Newsgroup: it.comp.lang.c++
Titolo: STL-like tree container

Sono alla ricerca, per progetti closed source commerciali, di un contenitore 
tree con filosofia STL, cioé basato su iteratori.
Vista la richiesta sulla licenza, ho trovato solo questo:
http://www.gamedev.net/reference/programming/features/coretree2/
Che però non é completamente adatto alle mie esigenze. Scrivo dunque qui per 
proporre una collaborazione.
Proporrei di aggiungere a questo container:
Depth-first iterator
Breadth-first iterator
find con l'uso di binary_function e unary_function
ed in generale qualsiasi miglioria che possa venire in mente.
Ovviamente io contribuirei per quanto nelle mie capacità, e la licenza 
resterebbe LGPL.
In alternativa si accettano consigli su implementazioni alternative.
-- 
         Giuseppe "Cowo" Corbelli ~\/~ My software: 
http://cowo.yoda2000.net
-<! Non c'e' niente da dire in proposito. Tutto quello che uno deve fare e'
   colpire i tasti giusti al momento giusto, e lo strumento suona da solo. !>-
                                 J.S. Bach

 proporre una collaborazione.
Prima di lanciarti a sviluppare, fai un giro sulle mailing list di
Boost. Se non sbaglio uno dei progetti della Google Summer of Code e'
stato proprio la realizzazione di un'implementazione generica di
alberi.
Ciao,
Nicola


Visto. Non mi é del tutto chiaro quanto sforzo e manpower ci sia dietro tutto 
questo (per farmi un'idea di quanto tempo servirà per avere una versione 
funzionante) ma la strada intrapresa mi pare proprio quella che fa al caso 
mio. Già uso boost quindi sarebbe la soluzione ideale.

Newsgroup: it.comp.lang.c++
Titolo: linker incazzoso

> 
http://www.geocities.com/sunsetstrip/stage/7787
 <<
<<<<<<<<<<<< _
Metal...@iol.it
 >>>>>>>>>>>>>>
(remove asterisk to reply)

Devi linkare scrsnave.lib (se non ricordo male il nome della libreria).
Nel Visual C++ 1.52 c'era un esempio di screen saver. Non so se nelle
successive versioni e' stato riportato.
Ciao.
--
Antonio Donatiello
SANPAOLO Spa


grazie, adesso funziona.
pensavo che bastasse inserire la #include "scrnsave.h", evidentemente non č
cosě
;-)

Newsgroup: it.comp.lang.c++
Titolo: OT: real time OS

Scusate per l'OT, ma (e non sto leccando)
qui mi sembra ci siano i newsreader piu` fichi.
Per tutti quei processi "critici", si usa un sistema
operativo real time.
Cosa vuol dire?
Ho capito che permette di fare i calcoli del controllo
in un periodo di campionamento fisso, ma come fa?
Se il mio algoritmo di controllo, per una data combinazione
di input, impiega (per calcolare le uscite) un tempo
(tempo di calcolo) t > T (tempo di campionamento)
come si puo` garantire il real time?
Stroncando quella procedura obbligandola a terminare
in un modo a dir poco ignobile e accettando un risultato
parziale?
Oppure?
E poi:
Windows 2000 non sara` real time vero?
Ciao e grazie.
Michele.


Prego
Yellow





ignobile e accettando un risultato parziale?
Qui dipende troppo da cosa ci sta dietro, cioè dal contesto in cui operi. Se
devi controllare un processo fisico, una catena di montaggio o cose del
genere, non c'è proprio verso: devi rispettare questi vincoli di ordine
temporale. In altri contesti, invece, potrebbe aver senso parlare di
soluzione parzialmente corretta. Un problema difficile risolto a metà è
meglio che un problema difficile non risolto per nulla. Altre applicazioni
individuano dei cosiddetti milestones: risultati parziali di importanza
strategica tali da suggerire che il processo ha raggiunto con successo un
punto critico. Ad ogni milestone lo stato del sistema viene congelato e la
soluzione raffinata in modo da riflettere quello stato (ritenuto sicuro da
quel momento fino al raggiungimento del successivo milestone). Ogni crash
oppure ogni vincolo che venga rotto tra un milestone e il successivo,
richiedono che il sistema venga riportato all'ultima configurazione sicura e
ne venga ripristinato lo stato e il flusso di calcolo da quel punto in poi.
Insomma, tutto dipende dal significato che può avere una soluzione
parziale in un determinato contesto.
Per restare più consoni al soggetto del NG, uno dei motivi che hanno spinto
a non includere meccanismi di garbage collection come primitive del
linguaggio C++ risiede proprio nell'impossibilità di garantire il
completamento di tale operazione entro una determinata porzione di tempo
imposta a priori. In tal senso, la garbage collection non può far parte di
un sistema real time.

 >
Ah, ma allora li pagano. Io pensavo che facessero solo pratica per imparare
a programmare un sistema operativo...
--
San Vegeta from Hell
Nuovo proverbio babilonese:
"Tanto va il Bruno al bug che ci lascia il rimedino..."

Windows 2000 non sara` real time vero?
No. Sarebbe una fesseria un fare un R.T.S.O. per quel target di
clienti. R.T. non vuol dire piu' prestante, ma solo *piu'
deterministico*.
-------------------------------------------------------
Togli il Papero il vero indirizzo d'email.
Newsgroup: it.comp.lang.c++
Titolo: [URGENTE] parametri nel main

Scusate, ma ho fatto un programma che devo consegnare entro domani e 
volevo mettere 2 parametri nel main, ma non funzionano:
questo è il main:
void main(char* sorgente,char* destinazione) {
	readfile("c:\\
rete.net
");
	tracerout(sorgente,destinazione);
}
Se runno il progetto da Borland C++ 3.1 mettendo 2 stringhe nel menu 
Argument e poi guardo passo passo vedo che sorgente e destinazione sono 
vuoti..
cosa può essere??
grazie a tutti

 }
Scusami, non offenderti, ma mi stupisco che tu abbia fatto il resto
del programma.
Ti do tre suggerimenti:
1- il main DEVE restituire un "int"
2- scopri cosa sono "argv" e "argc" e scoprirai come risolvere il tuo
problema
3- comprati un BUON manuale C. Non si impara/programma a tentativi.
Nel caso, aggiungerei di partire con l'ultimo suggerimento e finire col
primo.
Buon lavoro
-- 
Gerolamo


Succede che la chiamata al main ha questa forma:
int main (int argc, char *argv[]) {...}
"argc" contiene il totale numero dei parametri passati al programma + 1.
"*argv[]" è un puntatore a lista di puntatori che puntano al nome del
programma, cioè argv[0] contiene il nome programma, mentre argv[1], argv[2],
etc. contengono i parametri passati a runtime.
Ciao.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 cosa può essere??
puo' essere che i parametri a un main non si passano cosi', forse?
-- 
Kali

 void main(char* sorgente,char* destinazione) {
no no :) il prototipo del main() e' ben diverso, qualcosa tipo:
int main(int argc, char * argv[]);
i tuoi due parametri puoi estrarli cosi':
sorgente = argv[1];
destinazione = argv[2];
[nota: assegnazione di puntatori, se usi c++ preferirei usare le piu' 
sicure std::string piuttosto che i char *...]
(argv[0] e' il nome dell'.exe del programma)
...dovresti fare anche un controllo su argc, per verificare che l'utente 
abbia effettivamente inserito i due parametri (argc == 3 <= 1 + 2 
parametri; 1 = il nome dell'exe (c'e' sempre))
bye
dan
Newsgroup: it.comp.lang.c++
Titolo: PER SCOZZOALTO

Poverinooooooooooooo!!!!!!!!!!!!!
Quanto sei sfigato!!!!!!!
Non ti rendi conto che sei ridicolo, anzi ridicolissimo!!!!!
Mentre tu sei lě, lěěěěěě calmissimo a pensare al tuo linguaggio di merda
cazzo++, mi auguro che ti si resetti il computer e ti esploda in faccia con
tutto il vetro negli occhi!!!!! Cosě diventi cieco per sempre e non rompi
piů il cazzo con i tuoi problemi di merda!!!!!!
Mi fai quasi pena, a 17 anni rincoglionirsi con un linguaggio del cazzo a
fare i cicli, le puttanate, la task bar, ecc... vai un pň fuori all'aria
aperta a vedere se ti mettono sotto una volta per tutte, cosě la smetti di
riempire il NG di cazzate!!!!!
Che classe fai? La quarta? Bella sborata!!!!
Un tuo caro amico.
Rocket

...


Non mi pare un linguaggio adatto al newsgroup il tuo comunque. Meglio le sue
"cazzate" allora (se anche lo fossero) che i tuoi insulti gratuiti e
inutili. Forse che ti rode qualcosa?

Rocket wrote:
[snip]
O ci dai un taglio subito o ci costringi a prendere provvedimenti
piu` seri, come farti staccare l'account, a vita possibilmente!!
Non sto scherzando !!
Puoi anche non postare il tuo vero indirizzo e-mail,
ma sappi che sei cmq  rintracciabile tramite il tuo provider.
Non so perche' ce l'hai con questo SCOZZOALTO, ma se avete
dei problemi risolveteli in privato.
Questo e` un ultimatum. Non sto scherzando !!
Mi scuso con il NG per l'OT, ma mi pareva
che la situazione stesse degenerando a livelli
intollerabili.
-- 
Roberto Gerola
Email: 
roge...@tin.it
WWW: 
http://space.tin.it/computer/rgerola

Questo bene educato signore, che insulta su questo ng, sembra la stessa,
persona
che ha insultato gli utenti sul ng it.comp.lang.pascal , ( ha giudicare
dal server di ravenna ).
Vorrei per favore che questa storia finisse.
Mi scuso con il ng... per l' ot.
Roberto Gerola ha scritto:


Va bene, finito.....
Newsgroup: it.comp.lang.c++
Titolo: Borland C++ 5.0

Salve a tutti!
Visto che mi sono perso le riviste dove veniva distribuito gratuitamente,
volevo sapere se qualcuno sa dirmi se lo posso scaricare da qualche sito.
Posseggo il Borland C++ Builder v.1.0 ma credo che con un compilatore non
visuale potrei imparare a programmare meglio vedendo come funzionano le cose
ad un livello + basso, cosa che non mi sarebbe permessa con le VCL o le MFC
o altre.
Grazie
--
Gigabyte
------------------------------------------
Puoi contattarmi via E-Mail all'indirizzo:
        ze...@NOSPAMusa.net
Togliere " NOSPAM " dall'indirizzo.
------------------------------------------

ad un livello + basso, cosa che non mi sarebbe permessa con le VCL o le MFC
Avevo il tuo stesso problema, ma ho scoperto che puoi usare il Builder
esattamente come il Borland C++ 5.0. 
Vai su File->New->Console App, ottenendo così una console application (cioè un
applicazione x win non grafica). Cancella tutto quello che c'è nella finestra
del codice, poi vai in Options->Project, scheda Linker e seleziona Windows GUI.
A questo punto puoi scriverti il tuo codice Win32 esattamente come in Borland
C++ 5.0 (WinMain, ecc).
Bye,
            Daniele
--- Per rispondere in e-mail, togliere "cutme" dall'indirizzo.

Newsgroup: it.comp.lang.c++
Titolo: [Forse OT]Esiste un glob per c++?

Chiedo scusa in caso di OT
In TCL/TK esiste una procedura standard "glob" che restituisce una lista dei
file nella directory corrente i cui nomi rispettano certi requisiti. Ad
esempio se nella directory corrente ci sono i file:
            aaa.txt   bbb.txt   aaa.exe
allora
glob *.txt
restituisce la lista
aaa.txt   bbb.txt
mentre
glob aaa.*
restituisce la lista
  aaa.txt    aaa.exe
Esiste qualcosa di simile nella libreria standard del c++? O se preferite:
sono OT?
In caso di risposta negativa per unix e visulc++ avete qualche idea?
Vi ringrazio anticipatamente
Massimo Petrillo

 In caso di risposta negativa per unix e visulc++ avete qualche idea?
Sotto Unix ci sono le opendir/readdir per leggere una directory, e poi
stat (o fstat, o lstat) per informazioni sui file; o puoi aprire una
pipa (con popen) per leggere l'uscita di 'ls *.txt' o di 'ls aaa.*' .
Tutto standard POSIX (opendir, readdir, stat e popen).
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it


Puoi darti un'occhiata ai sorgenti di questo:
 
http://www.boost.org/libs/dir_it/index.htm
 
Max

 In caso di risposta negativa per unix e visulc++ avete qualche idea?
Questa parte della domanda, come avrai intuito, è OT.
Chiedi negli appositi NG.
P.S: Per Nicola. credo che questo possa essere un buon esempio per le
FAQ di come la stessa domanda possa essere IT e OT a seconda di come è
posta.
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556
Newsgroup: it.comp.lang.c++
Titolo: Gestire la parallela nell XP

ciao! come faccio a "vedere" la LPT1 con software creati col C++, funzionano
solo sotto DOS, nell'XP mi sa che sn bloccate dal sistema operativo.
Ho scaricato un driver a questo link:
http://www.giobe2000.it/HW/Parallela/Pag/Prg00_2.asp
parla di un driver DLPortIO e di una libreria e un kernel mode driver
ma nn sembra funzionare!potete aiutarmi??grazie!!



ti è stato già detto (anche se un po' bruscamente, ma visto che non hai
recepito, non bruscamente abbastanza) che in questo newsgroup non si parla
di GUI (perché non fanno [ancora?] parte delle librerie standard del C++),
figuriamoci se si parla di stampanti su un particolare sistema operativo, o
di driver!!!

Newsgroup: it.comp.lang.c++
Titolo: Principiante cerca suggerimenti per imparare

Vorrei imparare questo linguaggio di programmazione.
Mi sono dotato di un libro della Jackson e sto cercando sulla rete un
compilatore freeware. Spero che qualcuno mi sappia indicare dove
trovarlo o darmi il nome.
Mi farebbe piacere anche ricevere qualche consiglio riguardante fonti
dalle quali apprendere o altro.
P.S.: L'unico linguaggio che conosco e che so usare molto bene è il
vecchio Basic.
Grazie.
Guiski

...




Magari se gli rispondessi anche sarebbe piu' contento...
Guiski: il migliore compilatore C++ freeware e' il GNU C++, disponibile per
varie piattaforme tra cui DOS con extender 32 bit (DJGPP), Linux (GCC),
OS/2, etc.
Davide Marcato.
----------------------------------------------------
| -- Freelance International Consultant
| -- Win32/MFC/COM Development & Training
| -- Technical Writer & Speaker
----------------------------------------------------
| -- Email: 
mar...@programmers.net
| -- Web: 
http://www.DavideMarcato.com
----------------------------------------------------

 dalle quali apprendere o altro.
Poi ti consiglio di tenere d'occhio questo NG, sarà sicuramente utile.
Ciao
Roberto

Newsgroup: it.comp.lang.c++
Titolo: file text numeri

legere un file .txt con dentro
12345 45 85 96
12378 11 22 33
che legge e prenda 45 e lo mette dentro tabella n(1)
85 tabella n(2)
etc
grazie


Desidera' un caffe' nell'attesa della soluzione o altro ??
Leggiti gli stream, cin e la soluzione dovresti vederla da
solo...

Newsgroup: it.comp.lang.c++
Titolo: attribuire output di system() ad una var

Ciao,
e' possibile memorizzare in una variabile l'output ottenuto dalla funzione
system()?
Per esempio
char var[5];
var=system("echo ciao");
printf("%s",var);
---------> ciao
e' possibile???
grazie.

...

No, direttamente non e' possibile. L'unico modo per ottenere cio' che
vuoi con codice standard e' ridirigere l'output di system su file e
poi leggere il file. Altrimenti devi verificare su un newsgroup
relativo alla tua piattaforma la disponibilita' di meccanismi di
comunicazione tra processi tipo pipe.
Ciao,
Nicola
Newsgroup: it.comp.lang.c++
Titolo: API Windows

Ho scritto che il mio programma non compila alla riga:
DialogBox(hInst,"MYDB",hwnd,DialogFunc);
dando l'errore:
[C++Error] PMenu.cpp(89): Cannot convert 'int (__stdcall *)(void *,unsigned
int,unsigned int,long)' to 'int (__stdcall *)()'.
[C++Error] PMenu.cpp(89): Type mismatch in parameter 'lpDialogFunc' in call
to '__stdcall DialogBoxParamA(void *,const char *,void *,int (__stdcall
*)(),long)'.
Alex mi ha consigliato di aggiungere #define STRIC ma il programma ancora
non compila. Qualcuno ha altri suggerimenti?
Simone.

 wrote in message
Sx_o4.116677$C3.12...@news.infostrada.it...

Scusate c'è un errore #define STRICT al posto di #define STRIC
Simone Barbabella 
barba...@libero.it


Prova con
DialogBox(hInst,"MYDB",hwnd,(FARPROC)DialogFunc);
Ciao,
Stefano

Newsgroup: it.comp.lang.c++
Titolo: creazione conessione internet (c++ builder) ?!?!?!

Dobbiamo realizzare una tesina per un esame di reti di calcolatori.
Dovremmo implementare una connessione client-server con scambi di messaggi.
Utilizziamo il programma c++builder 3 e librerie winsock (no linux please)
Il problema è il seguente
- non sappiamo come realizzare la connessione passao-passo e come inviare e
ricevere dati!!!!
Chiediamo aiuto a chi può illuminarci con graditissimi esempi !!!!
Grazie.

 Utilizziamo il programma c++builder 3 e librerie winsock (no linux please)
Possibile che questa frase non ti faccia suonare un campanello di allarme?
Possibile che non ti rendi conto che la tua domanda riguarda un compilatore ed
un set di librerie e non un linguaggio?
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

guarda se avessi piů tempo, sarei il primo a cercare di trovare una
soluzione migliore al mio problema.
Ma dato che devo presentare un lavoro di tesina al mio prof di reti di
calcolatori al piů presto čpossibile, ho pensato di scegliere la via piů
breve e piů semplice (cosě almeno mi č sembrato fin dall'inizio l'uso del
builder).
Non per essere polemico, ma quando ti trovi daventi a situazioni del genere
con un lavoro che devi implementare senza che nessuno , neanche il beneamato
prof ,ti dia un "cazzo" di aiuto, beh allora la scelta alla soluzione del
problema viene fatta non in base alla migliore delle soluzioni, ma in base
al tempo e al livello di conoscenze di programmazione e dei software diciamo
cosě piů "giusti" da utilizzare per quel particolare problema.
Comunque grazie dell'attenzione!
Andrea Ferro <And...@UrkaDVD.it> wrote in message
9ijcq2$e9k$1...@serv1.iunet.it...

Newsgroup: it.comp.lang.c++
Titolo: testo a colori

ciao! qualcuno saprebbe dirmi come faccio a modificare il colore del
testo di un oggetto CStatic? non sono riuscito a trovare nessuna
funzione che mi dia questa possibilià :( (uso il vc5)...
grazie :)
davide
in an intastella burst im back to save the universe
climb on: 
http://www.geocities.com/SunsetStrip/8742
Dade on #u2ita      ICQ# 13015755

funzione che mi dia questa possibilià :( (uso il vc5)...
Come ho postato pochi giorni fa: si deve gestire, nel dialogo che
contiene il CStatic in questione, la gestione del messaggio che si
riceve appunto per cambiare, se si vuole, il colore dei control.  Il
messaggio e` WM_CTLCOLOR, quindi aggiungendo col wizard
il gestore per il messaggio stesso si ha, ad esempio:
HBRUSH CMidiaDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    if(pWnd==&m_myStatic) {
        // eventuali manipolazioni di pDC, tipo
        // pDC->SetTextColor(0x00FF00), ecc
        return CBrush(0xFF0000);
    }
    return hbr;
}
Qui suppongo che m_myStatic sia la variabile CStatic d'interesse.
Alternativamente, si puo` usare la "message reflection" che la MFC
implementa sin dal release 4.0, per gestire WM_CTLCOLOR nella
classe che implementa il controllo stesso, derivando un controllo
apposito allo scopo.  Si veda la Technical Note 062, "Message
Reflection for Windows Controls", se si vuole perseguire questa
strada invece di quella (piu` semplice, anche se meno elegante e
forse meno adatta a progetti di grandi dimensioni) "normale" della
gestione nella classe-dialogo.
Alex

il gestore per il messaggio stesso si ha, ad esempio:
grazie mille alex! infatti ho letto il thread su questo argomento solo
dopo avero mandato il mio messaggio... è da poco che frequento questo
newsgroup e non avevo ancora letto tutti gli alti post :)


> 
http://www.geocities.com/sunsetstrip/stage/7787
 <<
<<<<<<<<<<<< _
Metal...@iol.it
 >>>>>>>>>>>>>>
(remove asterisk to reply)
Newsgroup: it.comp.lang.c++
Titolo: Che devo passare l'id ad AppendMenu(....)?

Devo realizzare un menu a runtime, però non so come passare l'id della voce
del menu.
Mi spiego meglio, ho la definizione della mappa dei messaggi così composta
BEGIN_MESSAGE_MAP(......
    ON_COMMAND(IDM3594_LOGIN, prova)
............
END_MESSAGE_MAP()
quando devo realizzare il menu a runtime utilizzo la funzione
AppendMenu a cui devo passare un flag e l'id del metodo da lanciare:
pMenu->AppendMenu(MF_STRING,IDM3594_LOGIN,"&Prova");
solo che IDM3594_LOGIN lo ricavo da una varibile char, se scrivo una cosa
del genere il tutto non funziona:
char* MyVar = "IDM3594_LOGIN";
pMenu->AppendMenu(MF_STRING,(UINT)MyVar,"&Prova");
compila senza problemi ma non viene lanciata la voce di menu :(.
Come posso fare?
Ciao
Terenzio

Come posso fare?
Non e` chiaro cosa tu stia cercando di ottenere, comunque se ti
serve davvero passare, a runtime, da una stringa che capita
coincida con una certa macro, al valore intero a cui quella macro
si espandeva a compile-time, non vedo per te altre alternative
che non costruirti, a compile-time, una tabella di conversione da
stringhe (che sono nomi di macro) a interi (valori delle macro),
se no l'informazione su questa associazione si perde.
Magari puoi ottenerla processando resource.h con un tuo
programmino ad hoc.
Ma mi sembra molto improbabile che non ci siano modi piu`
semplici e naturali di fare quel che davvero ti serve, una volta
capito COSA davvero ti serva:-).
Alex
Newsgroup: it.comp.lang.c++
Titolo: Loki::Tuple e g++

Sto usando una versione del g++ abbastanza recente.
Perché non compila?
#include "HierarchyGenerators.h"
using namespace Loki;
int main()
{
	Tuple<TYPELIST_2(int,int)> tuple;
	Field<0>(tuple) = 4;
};
--
Fabio.

fabioppp wrote:

che dice il compilatore _di preciso_?
-- 
Sģ d'accordo "Free Mandela", "Free Valpreda" e tutti gli altri, ma free 
anche Fitti Fattis!

 
Che la gerarchia della tupla č ambigua... ed č vero
E per questo da uno warning (amibiguous base class warning).
L'errore č su Field<0>(tuple) = 4; dovuto all'ambiguitą della gerarchia
Perņ l'implementazione di Field dovrebbe risolvere quell'ambiguitą.


Io credo che GenScatterHierarchy sia bacata come idea quando esistano
almeno due tipi uguali nella Typelist.
La gerarchia generata risulta infatti ambigua, non per niente il 
compilatore g++ da sempre warning quando viene istanziato il template 
GenScatterHierarchy con alemno due tipi uguali.
Da questa ambiguità deriva l'impossibilità di ottenere una Unit, dato un 
tipo (come specificato anche nel libro[ModernCppDesing]); si può 
ottenere soltanto con accesso per indice.
Questo sembra permettere di superare il problema dell'ambiguità.
Secondo me non è così, infatti, si consideri questo frammento:
template <class H, typename R, int i>
inline R& FieldHelper(H& obj, Type2Type<R> tt, Int2Type<i>)
{
    typename H::RightBase& subobj = obj;
    return FieldHelper(subobj, tt, Int2Type<i- 1>());
}
L'upcast di obj a subobj risulta a mio avviso ambiguo, visto che
H::RightBase può essere convertito a H::LeftBase.
A questo punto nonostante ci sia scritto RightBase il compilatore non sa
se andare a sinistra o a destra negli upcast e genera quindi un errore
dovuto all'ambiguità nella gerarchia (dedotta dal precedente warning).
--
fabioppp
Newsgroup: it.comp.lang.c++
Titolo: virtual nel distruttore

Perchè il codice:
#include <iostream>
using namespace std;
class A {
public:
  virtual void ciao() {
    cout << "ciao di A" << endl;
  }
  virtual ~A() {
    ciao();
  }
  void prova() {
    ciao();
  }
};
class B : public A {
public:
  virtual void ciao() {
    cout << "ciao di B" << endl;
  }
};
int main() {
  A a;
  a.prova();
  cout << "########" << endl;
  B b;
  b.prova();
  cout << "########" << endl;
}
stampa il risultato:
ciao di A
########
ciao di B
########
ciao di A
ciao di A
Grazie
Gianni

Gianni ha scritto:

metodi virtuali andrebbero evitati nei costruttori e distruttori.
Diciamo mai nei costruttori, mentre nei distruttori occorrerebbe 
aggiuggerne la chiamata in tutte le classi derivate (se viene ridefinito 
il metodo).
In questo caso il distruttore di B (aggiunto dal compilatore) prima 
distrugge i suoi metodi e/o attributi, poi termina la sua distruzione 
richiamando il distruttore di A.
E B::ciao() a quel punto, non esiste piu'.

 
 
http://groups.google.com/group/it.comp.lang.c++/msg/c6f2ea17266db66b

 ciao di A
// Creazione di b.
A();	// viene creata la tavola per le funz. virtuali
B();	// viene aggiornata la tavola (override di "ciao")
// Distruzione di b.
~B();	// viene ripristinata la tavola (elim. dell'override)
~A();	// viene distrutta la tavola
A() non può chiamare (anche se dall'esempio non si vede) B::ciao() 
perché B non è ancora stato costruito, mentre ~A() non può chiamarlo 
perché B è già stato distrutto.
Questa spiega perché non si può ottenere l'effetto desiderato. 
Osservando inoltre che le tavole virtuali non vengono (almeno 
concettualmente) generate/distrutte in una volta sola, ma aggiornate da 
ogni costruttore/distruttore, si può comprendere il comportamento 
all'apparenza bizzarro:
A() chiamerebbe (esempio permettendo) A::ciao() perché l'override non 
avrebbe ancora avuto luogo e, nell'esempio, ~A() chiama A::ciao() perché 
l'override è stato appena eliminato.
Kiuhnm