mii-community/UsenetArchiveIT-conversations huggingface dataset:
Newsgroup: it.comp.lang.c++
Titolo: Aiuto : complemento e operatori

Salve.
Da pochissimo ho cominciato a giocare con il  C++ servendomi degli esempi
forniti insieme al compilatore. Dato che non ho il manuale
e che devo risolvere - in fretta - un problema, ho deciso di sporcare un
pochino il NG.
Le cose che mi preme sapere con una certa urgenza sono queste :
- Devo invertire lo stato di alcuni bits ( da 1 a 0 e viceversa)
all'interno di una variabile, lasciando inalterati i rimanenti. Come devo
fare ? esiste una funzione apposita ?
- In che modo posso leggere tutta la memoria montata sul pc ?
  in grosse linee come funziona l'indirizzamento ?
- Come si scrive "diverso da..." all'interno di una funzione if o While?
   es.   if (x č diverso da y) {bla,bla,bla,,,, }
- Potrei avere la lista completa degli operatori logici e relativo
significato ?
Poi :
- Qual'č il compilatore C++ piů aggiornato ? E il manuale ?
- Dove trovo un Manuale di solo Assembler ?
Ringrazio anticipatamente.
Massimo

 E il manuale ?
Di solito sono accompagnati da una certa documentazione su file o
consultabile direttamente su web.
EMG

- Dove trovo un Manuale di solo Assembler ?
In rete qualche manuale e qualche tutorial ben fatto lo troverai, anche se
solo in inglese. Per quel che riguarda un manuale cartaceo devo dirti di
aver cercato a lungo ma di non essere riuscito a trovare nulla....
Ciao, Giuseppe
---------------------------------------------------------------------------
_Guybrush su IRCNet canale #programmazione
ICQ: 42227764
---------------------------------------------------------------------------

Newsgroup: it.comp.lang.c++
Titolo: Keyboard Hook




Newsgroup: it.comp.lang.c++
Titolo: COMPILATORE

Ho appena iniziato a imparare il C++
ho preso un compilatore freeware per DOS (il DJGPP). Mi chiedevo pero'
se ne esistesse uno per Win95, (freeware)
Grazie a tutti  :)
            ________________________________
        / )|                                |( \
       / / |        Mauro "Tora" Pagano     | \ \
     _( (_ |   E-mail: 
ma....@flashnet.it
   | _) )_
    (((\ \>|_/->________________________<-\_|</ /)))
    (\\\\ \_/ /                          \ \_/ ////)
     \       /  Mi puoi trovare anche su: \       /
      \    _/      IRCnet  Canale #it      \_    /
      /   /         NickName: ^Mauro^        \   \
     /___/                                    \___\
 
http://www.geocities.com/Hollywood/Lot/6437/index.htm
     Membro del Mulegia Group .Inc Katsura Fans Club                  
                  Membro #13 dell'U&TFC
                 Fan #1 di Video Girl Ai

...


se ne esistesse uno per Win95, (freeware)
Si`, ad esempio vai sotto 
http://www.cygnus.com
 e vedi
i loro link relativi a:
    egcs -- la versione piu` aggiornata di gcc, lo stesso
        che usa il djgpp, per varie piattaforme
    gnuwin32 -- un port "pesante" di gcc (non l'ultima
        versione, di default) a Win32 (quindi W95, NT,
        ecc)  con discreta emulazione Unix
    mingw32 -- un port "leggero", senza gli strati di
        emulazione Unix
Mumit Khan ha sviluppato e distribuito un port di egcs
(mi pare, attualmente, nella versione egcs 1.1) sia
per l'ambiente gnuwin32, sia per quello mingw32 (se
non hai esigenze specifiche di emulazione Unix, puo`
convenirti quest'ultimo); non ho l'URL sotto mano, ma
dovresti arrivarci agevolmente navigando dai puntatori
piu` rilevanti del sito della Cygnus.
Alex


Ciao, io ho scaricato l' EGCS-1.1-mingw32.zip .
Scusa l'ignoranza ma che vada sotto w95 cosa significa?
Io devo comunque compilare sotto dos.
E l'eseguibile gira sempre sotto dos.
Ciao e grazie.

E l'eseguibile gira sempre sotto dos.
E allora non ti servono compilatori per Windows 95
ma compilatori per DOS, come il DJGPP (non lo uso
personalmente, ma se ne sente parlar bene; e`,
come il mingw32, anch'esso una versione di gcc).
Alex
Newsgroup: it.comp.lang.c++
Titolo: Porte Seriali

Per aprire le porte seriali utilizzo l'API CreateFile. Tutto ok fino a che
tento di aprire la porta seriale n. 10 (la COM10).
Qualcuno sa perche la seguente chiamata ritorna un puntatore non valido?
CreateFile("COM10",
           GENERIC_READ,
           0,
           NULL,
           OPEN_EXISTING,
           FILE_ATTRIBUTE_NORMAL,
           NULL);
Forse è un bug della stessa funzione? Supporta le seriali fino alla 9?
Grazie,
 Giuseppe
-- 
Posted from 
sole.ansa.it
 [195.223.127.253] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Ciao,
Questo newsgroup si occupa del linguaggio C++ in quanto tale, e non di
aspetti specifici di particolari implementazioni. Per questo non e' il
posto piu' adatto per porre domande specifiche come la tua.
Potresti avere piu' fortuna su uno dei seguenti gruppi:
Per Win32 (95, 98, NT): it.comp.programmare.win32
Per Dos/Win 3.x: it.comp.os.dos
Per Linux:      it.comp.os.linux.development
Per C++Builder: i gruppi borland.public.cppbuilder.*, disponibili sul
                server 
newsgroups.borland.com
 (prevalentemente in 
                inglese, ma si puo' postare anche in italiano)
Grazie,
Nicola Musatti
Newsgroup: it.comp.lang.c++
Titolo: allocazione dinamica in una classe

Salve a tutti,
ho il seguente problema:
sto' cercando utilizzare l'allocazione dinamica nella mia classe ma 
ottengo questo errore:
ISO C++ forbids in-class initialization of non-const static member `conc'
class HashTable{
       private:
       list <azienda> *conc; //da inizializare di grandezza dinamica n/m
       conc = new list <azienda>[50];
Gli errori sono gli stessi se provo ad allocare int.
Qualcuno si e' gia imbattuto in un problema simile?
Manuel

Manuel wrote:

da scrivere 10 volte alla lavagna:
il c++ non è java
;-)
non puoi inizializzare degli elementi in questa maniera al di fuori di 
una funzione o di un costruttore. A meno che non si tratti di un membro 
numerico dichiarato come static const, come ti suggerisce il compilatore
-- 
MSN: sirpsycho_78 -at- hotmail dot com
... in missione per conto di Dio.


Non puoi usare la new in questo modo fuori dai metodi. L'inizializzazione č 
permessa solo per i membri static const. Credo tu voglia fare qualcosa del 
genere:
#include "azienda.h"
#include <list>
class HashTable {
public:
 HashTable() {//costruttore!
    conc = new std::list <azienda>[50];
 }
virtual  ~HashTable() {}
private:
    std::list <azienda> *conc; //da inizializare di grandezza dinamica n/m
}; 

 conc = new list <azienda>[50];
Fermo restando quello che ti hanno già detto,  visto che devi instanziare 
un array di list<azienda>, ti suggerirei di usare un membro
 std::vector < list<azienda> >  conc;
che, se vuoi dimensionare opportunamente, inizializzerai nel costruttore, 
in questo modo:
   HashTable() : conc( 50 )
   {
   }
Se usi un array instanziato con 'new' dovrai:  ricordati di invocare 
'elete[]'  nel distruttore e definire un appropriato costruttore copia e un 
operatore assenamento per HashTable, in quanto quelli sintentizzati dal 
compilatore in questo caso non andranno bene.
Max

 Max
Ti sono riconoscente per questo suggerimento, ma devo inclusere qualcosa 
per usare vector?
facendo using std::vector; mi dice che vector non e' dichiarato.

Ringraziamenti a Dildo Baggins, Acaccia e Max che mi hanno aiutato a 
risolvere il mio problema.

Manuel wrote:
Grazie ho risolto :)
#include <vector>
Newsgroup: it.comp.lang.c++
Titolo: Errori nella compilazione

Salve a tutti,
non riesco a trovare dove sta l'errore in questo programma; potete darci
un'occhiata!?
grazie.
#include<stdio.h>
float pot_pos(float);
float pot_neg(float);
int main()
{
   float b,e,RIS_NEG,RIS_POS;
   printf("Inserisci la base");
   scanf ("%d",&b);
   printf("Inserisci l''esponente");
   scanf("%d",&e);
   if ((e>0)||(e==0))
    {
      RIS_POS=pot_pos(b,e);
      printf("Il risultato S",RIS_POS);
    }
   else
    {
      RIS_NEG=pot_neg(b,e);
      printf("Il risultato S",RIS_NEG);
    }
return 0;
}
float pot_pos(float x,float y)
{
   int j,g;
   g=x;
   for(j=1; j=y; j++)
      RIS_POS=(x*g);
   return(RIS_POS);
}
float pot_neg(float k,float l)
{
   int q,w;
   w=k;
   l=l*(-1);
   for(q=1; q=l; q++)
      RIS_NEG=(k*w);
   return(1/RIS_NEG);
}
--
.·´¯`·.¸¸.·´¯`·.¸.·>>> Psycotony <<<·.¸¸.·´¯`·.¸.·´¯`·.
   e-mail: 
psyc...@libero.it
   ICQ# 71896691
   C6: psycotony
   Site: 
http://digilander.iol.it/Psycotony
"L'amore ci elargisce la più straordinaria, ineffabile esperienza.....
giacché infatti noi siamo nati per amare".


Saluti  Manlio Perillo
Newsgroup: it.comp.lang.c++
Titolo: esiste extern con class?

se dichiaro una classe in un file diverso dal principale, posso poi accedere 
ad essa attraverso extern? 

 ad essa attraverso extern?
No, devi includere quel file (e quindi deve essere chiaramente un header
file, con tutte le conseguenze del caso).
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

 ad essa attraverso extern? 
Non ci puoi fare su molto.
extern class C;
class D{
   C c
}
per esempio non funzionerà.
Funzionerà invece:
class D{
   C *c
}
-- 
RiK0
Non credo negli schemi non vincenti.

 ad essa attraverso extern? 
Non ci puoi fare su molto.
extern class C;
class D{
   C c
}
per esempio non funzionerà.
Funzionerà invece:
class D{
   C *c
}
Chiaramente poi per *fare* qualcosa su *c, ho bisogno di vedere la sua
implementazione. Ma faro' in modo di avere l'implementazione di D in un
altro file dove invece includo la definizione di C.


 file, con tutte le conseguenze del caso).
Esistere esiste. Le cose che ci puoi fare sono limitate (solo puntatori).
Nell'altro post mi sono spiegato parecchio male, e non se ne vede
direttamente l'utilita'.
Ma sta faccenda mi puo' servire per separare interfaccia da
implementazione.
Mi spiego meglio....
Io posso avere un file
motor_impl.h 
dove definisco l'interfaccia di motor_impl, che contiene il funzionamento
interno del motore (magari potrebbe anche essere roba polimorfica).
motor_impl.cc che implementa quanto di cui sopra.
Poi avro' un file 
motor.h che *non* include motor_impl.h
avro' solo
class motor{
    private:
        motor_impl* myMotor;
    public:
    /* costruttori vari */
 
        void start();
        void stop();
        void accelerate(unsigned int);
        void decelerate(unsigned int);
}
poi avro` un file motor.cc che contiene l'implementazione di motor, che
invece include motor_impl.h, poiche` ha bisogno di operare effettivamente
sugli interni del motore.
In questo modo pero` io posso mostrare solo la classe motor, separando
ulteriormente il tutto.
-- 
[ RiK0                                ]
[ non credo negli schemi non vincenti ]
[ two is an odd prime number          ]

Rispondo perche' non mi sembra che quanto scritto dagli altri finora
sia chiarissimo.
In C++ puoi dichiarare una classe (la specifica extern non e'
necessaria):
class A;
Oppure definirla:
class B {
// dichiarazioni/definizioni dei membri
};
La dichiarazione e' sufficiente in tutti quei contesti dove non e'
necessario conoscere ne i membri ne la dimensione della classe, ad
esempio per definire membri dati o variabili come puntatori o reference
alla classe o per i parametri ed i valori di ritorno nelle
dichiarazioni di funzioni.
La dichiarazione non e' sufficiente per specificare una classe base,
membri dati o variabili del tipo corrispondente o per definire funzioni
che prendano come parametro o restituiscano quel tipo.
Ciao,
Nicola
Newsgroup: it.comp.lang.c++
Titolo: typedef e puntatori

se io ho un tipo cosě definito:
typedef struct pippo  *ciao;
e poi dichiaro:
ciao *fabrizio;
ottengo un puntatore alla struttura pippo o un puntatore ad un puntatore
alla struttura pippo?
Grazie
Fabrizio

:

La seconda.
Saluti
-- 
Per l'e-mail rimuovere la frase in maiuscolo e gli underscore.
Worship Him! 666

con un puntatore ad un puntatore alla struttura,  per poter accedere ai
campi della struttura come faccio?
ri-GRAZIE
Fabrizio

Dovrebbe essere:
struttura-> campo
"fabrizio" <fabs...@liberoNOSPAM.it> ha scritto nel messaggio
news:5nUpa.25444$DN.7...@tornado.fastwebnet.it...


 con un puntatore ad un puntatore alla struttura,  per poter accedere ai
(*ppstruttura)->membro
-- 
   |   \    \  | ___|_  |_  | ianezz a casa sua... :-)
   |  _ \  | \ | _|    /   /  Visita il LinuxTrent a
  _|_/  _\_|  _|____|___|___| 
http://www.linuxtrent.it

OK!!!!!! FUNZIONA!!!!!!
Grazie mille!

Newsgroup: it.comp.lang.c++
Titolo: Arrotondamenti

supponete di avere:
double d;
double dr = ((int)(d*100)) / 100.0;
int i = (int)(dr * 100);
allora si può affermare con certezza che:
(dr * 100) == (double)i
per qualsiasi valore di d nell' intervallo [-1,1] ???


No. Se dividi per 128 avresti qualche speranza, ma è sempre molto 
sospetto un confronto esatto tra double.
E.

?manu* ha scritto:

Ma sei proprio sicuro??
Perchè riformulato meglio è praticamente equivalente a chiedere:
int i;
double dr = i / 100.0;
assert((dr * 100) == (double)i);
che a occhio dovrebbe funzionare.
anzi ho provato con alcuni valori, e mi pare che funzioni (ma mi chiedo 
se funziona per caso o se lo std lo garantisce).

 che a occhio dovrebbe funzionare.
...
Mi autorispondo subito che sono in errore:
ho provato con questo programma l'intervallo che mi interessa [-100, +100]
#include <iostream>
int main(int argc, char* argv[])
{
	int i;
	double dr;
	for(i=-100; i<=100; ++i)
	{
		dr = i / 100.0;
		if(dr * 100 == (double)i)
		{
		}
		else
		{
			std::cout << i << std::endl;
		}
	}
}
e l'output è il seguente:
-58
-57
-56
-55
-29
-28
-14
-7
7
14
28
29
55
56
57
58
quindi la risposta al mio primo post è NO: non è sicuro!

 quindi la risposta al mio primo post è NO: non è sicuro!
IMHO fai prima a guardarti un minimo un testo in cui spiegano qualcosina
sulle computazioni fp. Se ci devi lavorare un pochetto, ti levi tanti
grattacapi in un colpo solo.
-- 
blog:  
http://www.akropolix.net/rik0/blogs
 | Uccidete i filosofi,
site:  
http://www.akropolix.net/rik0/
      | tenetevi riso e
forum: 
http://www.akropolix.net/forum/
     | bacchette per voi.
Newsgroup: it.comp.lang.c++
Titolo: C++ CodeBlocks 10.1  con librerie wxWidgets

Ho installato codeblocks con il mingw incluso nel setup e le librerie, 
già compilate, delle wxWidgets.
L'eseguibile che mi crea funziona solo se le dll (wxmsw28ud_gcc.dll e 
mingwm10.dll) sono presente all'interno della cartella (... collegamento 
dinamico). Per poter compilare in modalità statica, cosa devo fare 
esattamente?
 
Il programma CodeBlock prevede  un settaggio che mi permette di 
scegliere tra compilazione dinamica o statica?
 
Ho provato anche il programma wxDev-C++ il quale, tra i vari settaggi, 
ho trovato
  la finestra dove è possibile settare  tra la compilazione statica e 
dinamica.
Diversamente da CodeBlocks, wxDev-C++ mi crea l'eseguibile che già 
include le dll. Questa volta, per curiosità,  ho provato a settare  il 
collegamento dinamico delle dll e, per mia sorpresa, il risultato 
ottenuto è  un errore in fase di compilazione.
 
Ciao
nero23
 
 

 scegliere tra compilazione dinamica o statica?
 
Prova Visualwx, io mi son trovato bene.
Farai un po' fatica a compilare wxwidgets ma poi ti troverai benissimo
(poi chiedi nel loro forum se avrai problemi)
Newsgroup: it.comp.lang.c++
Titolo: Stampare indirizzi car. di una stringa

Una piccola curiosità.
Data una stringa, intesa come un puntatore a un array costante di
caratteri, come posso stampare l'indirizzo in memoria di ciascun
carattere di essa?
Ho provato con questo codice:
#include <iostream>
int main()
{
     char* s = "HELLO WORLD";
     for ( int i = 0; i < 12; i++ )
       std::cout << ( s+i ) << std::endl;
     return 0;
}
Invece di ottenere indirizzi ottengo questo output, evidentemente
operatore cout interpreta la richiesta di inserire sullo stream la
sottostringa il cui indirizzo iniziale è (s+i);
HELLO WORLD
ELLO WORLD
LLO WORLD
LO WORLD
O WORLD
  WORLD
WORLD
ORLD
RLD
LD
D
C'è un modo per far stampare a cout gli indirizzi di ciascun carattere e
non ciò che è puntato, da quel punto in poi?
Grazie

carattere di essa?
std::cout << (void*)(s+i) << std::endl;
Stai attento comunque a non confondere pericolosamente array e
puntatori: un array è una cosa, un puntatore è un'altra cosa e un
puntatore ad array è un'altra cosa. Nel tuo caso non esiste alcun
puntatore ad array, c'è un puntatore che punta ad una zona di memoria
in cui sono presenti caratteri seguiti da un terminatore nullo.

 in cui sono presenti caratteri seguiti da un terminatore nullo.
Come ho potuto capire quando definisco qualcosa tipo:
char* s = "Hello World";
il compilatore la considera come tutto un blocco costante e lo alloca in 
area statica (č cosě?).
Diversamente non potrebbe funzionare una cosa del tipo:
char* getName() {
    return "Pippo";
}
Se "Pippo" non fosse static, all'uscita dalla funzione il puntatore 
farebbe riferimento a un'area di memoria non piů presente sullo stack.
Oppure no?
Grazie, sempre.

 Grazie, sempre.

farebbe riferimento a un'area di memoria non più presente sullo stack.
Quello che il compilatore fa è assicurare che "Pippo" sia allocata da
qualche parte, ma non sullo stack. La funzione restituisce sempre il
solito indirizzo, tanto è vero che il seguente codice:
#include <iostream>
char *getPippo1() { return "Pippo"; }
char *getPippo2() { return "Pippo"; }
char *getPippo3() { return "Pippo"; }
int main()
{
    std::cout << (void*)getPippo1() << std::endl;
    std::cout << (void*)getPippo2() << std::endl;
    std::cout << (void*)getPippo3() << std::endl;
    return 0;
}
sulla mia macchina ha output:
0x442000
0x442000
0x442000
Comunque ci tengo a precisare che la mia obiezione riguardava la
distinzione tra puntatore, array e puntatore ad array. In C/C++
scrivere:
// puntatore
int *p;  
// array
int a[50];
// array di puntatori
int* ap[50];
// puntatore ad array
int (*pa)[50];
sono quattro cose molto diverse.
Newsgroup: it.comp.lang.c++
Titolo: leda problemi

 ho un grosso problema.
Devo fare un esame che riguarda i grafi, li devo utilizzare in linux,
insieme alla libreria LEDA.  Uso suse 6.3
nel manuale della leda definisce un grafo g come:
graph G;
io ho fatto un file g++:
#include <LEDA/graph.h>
void main()
{
 graph g;
}
ma nella compilazione (g++ grafo.cpp)
mi da i seguenti errori:
undefined reference to: leda_graph::leda_graph(void)
e quindi non mi crea l'out.
Vi prego aiutatemi.......

...


...





davide quello che dici tu č giusto ma io includo la libreria stesso nel


hai ragione, provo prima e poi ti dico....
ciao e grazie
Newsgroup: it.comp.lang.c++
Titolo: Informazioni sul visual c++

Volevo solo sapere quali sono le maggiori differenze fra il Visual C++
4.0 ed il 5.0.
Ci sono delle cose che non posso fare con il 4.0? E tra il 4.0 ed il
4.2?
Per favore rispondetemi via mail perche' non visito questo newsgroup
molto spesso.
Thanks
-- 
*******************************************
Stefano Cristiano
autodeclarated Java programmer
ovverosia --> Pagghiu
E-mail: 
spag...@tin.it
 ITALY
Wonderful JAVA
"Mos tua, vita mea" said WINDOWS 95 to DOS...
*******************************************

4.2?
Se non ricordo male con il 4.0 non c'era ancora ATL, una libreria di
template per sviluppare controlli OCX senza far uso delle MFC. Per il
resto non ci sono grandi differenze, addirittura tra il 4.2 e il 5.0
le mfc sono rimaste le stesse. Comunque sull'MSDN c'e' un elenco
abbastanza dettagliato delle cose che sono state aggiunte nelle
diverse versioni, se ti interessa te lo posso mandare.
Gianpaolo Bottin
- Live Long and Prosper -
Newsgroup: it.comp.lang.c++
Titolo: traduzione da c++ a vb

Ciao a tutti,
non mi intendo di c/c++, ma vorrei trascrivere un semplicissimo
programma in vb, non riesco a tradurre una chiamata
ad una sub contenuta in una dll che riporto:
...........
STREAMREADER_API BOOL SetFilter(WORD pid,void* lpFunc,
DWORD CallBackType, DWORD size, DWORD *lpfilter_num);
...........
l'esempiodi utilizzo della stessa è questo:
SetFilter(17,&YourCallBack,2,2,&filter_num);  the "&" is important,
if you don't write it, it'll make you mad!
............
in particolare non capisco l'utilizzo della &, secondo me dovrei passare
un puntatore a una funzione di callback e una variabile dword per
riferimento...
ma non funziona.
Carlo

 ad una sub contenuta in una dll che riporto:
stai crosspostando in tutti i NG di programmazione. Stamani ti hi beccato in
quello di Delphi....

 stai crosspostando in tutti i NG di programmazione...........

 ma non funziona.
infatti devi passare per riferimento ...
in vb la dichiarerai in questo modo
declare function ...... (
  pid as long,
  lpFunc as long,
  byval CallBackType as long,
  byval size  as long,
  lpfilter_num as long
) as long
non ho provato ma credo funzioni...
ciao
--
------------------------
http://visualwx.d2g.com/
nuova release 0.35
VisualWx rad per wxwindows,c++ e python

 declare function ...... (
   byval pid as long,
   byval lpFunc as long,
   byval CallBackType as long,
   byval size  as long,
   lpfilter_num as long
 ) as long
in poche parole se devi passare un puntatore non metti byval (byref è di
default) :))
inve il secondo parametro deve essere un byval :
   byval lpFunc as long
in quanto addrreof (passaggio ptr della tua sub) passa il valore del ptr
se ci sono problemi fammi sapere ...senza provare è facile fare errori
ciao


Newsgroup: it.comp.lang.c++
Titolo: STL count_if mem_fun_ref equal_to

Salve,
mi servirebbe del codice che mi conti il numero di volte che ogni
oggetto di un vettore abbia una certo valore chiamando un metodo get,
possibilmente senza fare una classe predicato apposita da instanziare e
dare a count_if.
class o { string s; public: string getS() { return s; } };
vector<o> v;
...
count_if( v.begin(), v.end(),
	?? // ogni volta (*v).getS() == "X"
	);
Grazie
-- 
alef

alef <al...@localhost.nowhere> writes:

Con solo le funzioni standard non mi sembra che si riesca a fare
(manca la composizione di funzioni).
Prova a dare un'occhiata alle librerie bind e lambda di boost
(
http://www.boost.org
).
Esempio:
  #include <boost/lambda/lambda.hpp>
  #include <boost/lambda/bind.hpp>
  using namespace boost::lambda;
  ...
  vector<o> v;
 
  // riempimento do v ...
  int num_X = count_if(v.begin(), v.end(), bind(&o::getS, _1) == "X");
        Mauro


trovata la risposta da un mio collega:
(invio con il suo consenso)
count_if( v.begin(), v.end(),
	compose1(
		bind2nd(equal_to<string>(), "X"),
		mem_fun_ref(&o::getS)
	)
);
o::getS deve essere const.
Saluti
-- 
alef

 o::getS deve essere const.
che però usa una estensione SGI (compose1). Giusto perchè l'OP lo sappia...
-- 
There are better things in life than alcohol, but alcohol makes up for 
not having them. - Terry Pratchett.
Newsgroup: it.comp.lang.c++
Titolo: AIUTO SANF

Ciao 
qualcuno mi sa dire cosa significa la scritta
scanf ("%c%*c" , & letto );
che significato ha -> %c%*c  ????
Grazie ciao
Luke

che significato ha -> %c%*c  ????
%c   indica che deve essere letto un carattere e memorizzato.
%*c  indica che tutto cio' che segue deve essere letto e ignorato (non
memorizzato).
 
--
Andrea Laforgia (ICQ 87230455)
http://www.geocities.com/AndreaLaforgia
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

memorizzato).
Perche' "tutto cio' che segue" ? ... il formato indica che deve
essere letto (e ignorato) un carattere.
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

essere letto (e ignorato) un carattere.
Si', intendevo solo un carattere.
Non so xche' ho scritto quella fesseria ;)

Newsgroup: it.comp.lang.c++
Titolo: Forward declaration

]

class A { ... }; 
// implementazione metodi di A
class B { ... };   // solo dichiarazioni
class C { ... }; 
// implementazione metodi di B
// implementazione metodi di C
Ma forse sarebbe meglio che tu definissi C prima di B
(se possibile)
-----------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------

(se possibile)
No, anche perche' si presenterebbe il problema a parti inverse. C deve
poter allocare all'occorrenza B e viceversa.
La cosa che mi suona piu' strana e mi inuriosisce (non vorrei ci fosse
di mezzo qualche baco di egcs) e' il comportamento diverso tra classi
normali e template. Se qualcuno vuole gli spedisco via mail o sul
gruppo due programmini di poche righe da provare a compilare. 


gruppo due programmini di poche righe da provare a compilare. 
Prova a postare, ma non ti garantisco risposte in tempi brevi.
Cmq tieni sempre presente il modo in cui i template vengono
istanziati.
Paolo


 stranamente va tutto bene. Come mai?
Perche' essendo C un template il compilatore non puo' controllare la
validita' dell'assegnamento da te usato prima di avere espanso il
template: a quel punto pero' dovrebbe aver gia' visto tutte le
dichiarazioni ed il problema non dovrebbe esistere piu'.
Da come hai descritto le cose immagino che C usi B. Non puoi rigirare il
codice in modo da avere:
class A {... };
class B;
class C : public A {...};
class B {...};
o qualcosa del genere?
Ciao,
Nicola

class B {...};
Come ho detto Paolo Marotta si presenterebbe il problema a parti
invertite. 


 invertite.
[...]
Allora temo che non ti resti che introdurre una o piu' classi base
astratte che facciano da interfaccia... Mi sorge un dubbio, non e; che
il problema e' legato al fatto che definisci le funzioni membro
all'interno delle dichiarazioni delle classi (soprattutto se in origine
erano template)? In questo caso potrebbe bastare spostare il codice in
un file .cpp.
Ciao,
Nicola
Newsgroup: it.comp.lang.c++
Titolo: Info su dev

Ho da poco scaricato il dev
Vorrei far girare un programmino preso da un ng
Ma il dev me lo rifiuta
dopo aver fatto compila e esegui.
Sono alle prime armi
Mi date una mano?
Ecco il sorgente
#include<stdio.h>
#include<stdlib.h>
int N=0, d, M[8][8], inc[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
void Conta(int r, int c)
{
   int i,ic,ir;
   for (i=0; i<4; i++)
     {
       ir=r+inc[i][0];
       ic=c+inc[i][1];
       if (ir<0 || ic<0 || ic>=d || ir>=d || M[ir][ic]) continue;
       if (ir==0 && ic==0) N++;
 else
   {
     M[ir][ic]=1; Conta(ir,ic); M[ir][ic]=0;
   }
     }
}
int main(int argc, char *argv[])
{
   int i,j;
   if (argc!=2) exit(0);
   d=atoi(argv[1]);
   if (d<2 || d>8) exit(0);
   for (i=0; i<d; i++) for (j=0; j<d; j++) M[i][j]=0;
   M[d-1][d-1]=1;
   Conta(d-1,d-1);
   printf("D = %d   N = %lld\n",d,N);
   return 0;
}

 "anbra1"
A tutti e due dico: il C++ non è come alcuni altri linguaggi che basta
avere il compilatore per impararli. E' troppo complesso per impararlo
empiricamente. Ci vogliono libri e tanto tanto studio.
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg
Newsgroup: it.comp.lang.c++
Titolo: Domande sulla std::string

Salve, fino ad adesso ho sempre programmato molto in "C". Ora, per 
lavoro, vorrei sviluppare una utility in C++. Vorrei gestire le stringhe 
in modo un po' piu' evoluto e so che in C++ si puo' usare la classe 
std::string (che conosco solo per ... nome). Avrei alcune domande su 
questa classe:
(1) E' uno standard del C++ o appartiene a qualche class library o 
framework (es. STL) ?
(2) E' portabile ? (Almeno Linux/Windows)
(3) E' disponibile da qualche parte (su internet intendo) una guida di 
riferimento abbastanza completa e sopratutto chiara per questa classe ? 
(ho gia' fatto delle ricerche ...)
Grazie.

 Grazie.
 Prego.
Enrico

 (ho gia' fatto delle ricerche ...)
http://www.dinkumware.com/manuals/reader.aspx?b=p/&h=string2.html
(leggi le istruzioni)
Ciao,
Nicola
Newsgroup: it.comp.lang.c++
Titolo: [quasi ot] Leggete tutti, vorrei fare un programma per...

Salve a tutti,
innanzitutto mi "scuso" per la natura del subject ma non sapevo bene come
scriverlo, di meglio non mi è venuto :P
Cercherò di essere breve e il più chiaro possibile. E' un po di tempo che
stavo pensando a rifare una cosa tipo napster, di programmini per scricare
mp3 in giro ce ne sono tanti e...anche io volevo provare a fare qualcosa.
Sono un programmatore vb, non conosco tantissimo il C++, lo avevo
studiacchiato tempo fa, adesso se dovessi riscrevere del codice dovrei
rivedermi tutto perchè mi ricordo meno di niente, mi sono comunque
preposto di rimetterci mano perchè voglio riprenderlo.
Come anticipato sopra, volevo fare qualcosina di più o meno semplice per
permetttere il download degli mp3 in modo veloce. Ho già fatto qualcosina
in vb per me e i miei amici, ma quelli erano solo dei programmini atti
allo scammbio veloce di una piccola quantità di files, soprattutto erano
pensati per poche persone.
In casa ho messo su un server unix (per altri motivi) e volevo usarlo per
fare delle prove...il limite mi si pone nel momento in cui lato server
devo fare qualcosa che risponda al mio client vb :( Vb su unix non gira
bene :)) ma potrei però lanciarci dei programmi scritti in C/C++ e mi sono
quindi detto...bhè perchè non provare a fare qualcosa?
Se qualcuno è interessatto mi faccia sapere...sicuramente nessuno mi
aiuterebbe a scriverre un programma in C++ :P anche se ho perfettamente in
mente che dovrei fare, però se proprio non vuole aiutare me, magari se lo
fa lui, io potri vedere il suo codice e riiniziare a fare l' occhio sul
codice, se poi mi risponde anche a qualche domandina sarebbe ancora meglio
:))
Quello che dovrebbe fare questo programma è solo aprire connessioni verso
un db mysql e inviare/ricevere dati al client in vb che farei io, visto
che conosco il linguaggio.
Questo è quanto...ripeto, per me andrebbe bene anche uno che mi seguisse,
e magari il programma provo a scrivermelo da solo...
Saluti a buona giornata.

 Salve a tutti,
Quasi ot?
Mega-ROFTL!
-- 
Luc.

 Salve a tutti,
[cut]
penso che sia difficile che trovi qualcuno disposto a collaborare per
realizzare un programma di sharing P2P quando in giro se ne trovano centinaia
tra cui molti supercollaudati, e tra poco esce WinMX 3.0 con il download
simultaneo ... [blablabkla] ...
ancora più difficile sarà trovare qualcuno che ha il tempo di scrivere un
programma che a te può sembrare semplice, ma tuttavia richiede un impiego di
tempo notevole.... e blablabla...
il mio consiglio è di farti un giro su 
www.sourceforge.net
 dove sicuramente
troverai molti prog P2P, così scegli quello che ti interessa di più e ti studi
i sorgenti.
ciao :: xaero
Newsgroup: it.comp.lang.c++
Titolo: processi...

Ciao a tutti,
innanzitutto uso VC++ e WNT 4.0.
Domanda:
Come fa un certo processo a sapere che un certo suo
processo figlio (creato con CreateProcess) e' vivo?
Grazie
--
Tiberio Grasso
e-mail: 
gras...@tecnomare.it

Grazie
Ciao,
per risolvere un problema simile io ho utilizzato un timer (per il timeout)
ed un messaggio che il figlio manda al padre ad intervalli di tempo
regolari.
Ovviamente se si verifica un timeout il figlio e' "probabilmente" morto o
bloccato.
Forse pero' il mio problema era un po' differente dal tuo perche' io potevo
modificare anche il codice del figlio, tu non so.
Se credi, posso fornirti maggiori dettagli.
Ciao
Newsgroup: it.comp.lang.c++
Titolo: Compilatore C++

Vorrei sapere l'indirizzo ftp da cui scaricare una copia di un compilatore
di C++.
Grazie

 di C++.
Trovi il DJGPP per MS-DOS a partire dall'indirizzo
http://www.delorie.com/djgpp/
.
EMG

Newsgroup: it.comp.lang.c++
Titolo: Ho un problema con le MFC

Ho trovato un programma dimostrativo in C++ (sono un neofita in questo
programma, che richiedeva le inclusioni di AFXWIN.H, AFXEXT.H e
AFXCMN.H.
Una volta che compilato il programma, mi viene segnalato l'errore di
mancata individuazione di queste tre inclusioni. 
Domanda: Come posso far funzionare questo programma?
Ringrazio anticipatamente chiunque possa rispondere a questo mio
quesito.

...
:Ho trovato un programma dimostrativo in C++ (sono un neofita in questo

Se utilizzi VC++ sicuramente le trovi nella directory che contiene gli
header file. Se non usi VC++, probabile che tu non possa compilare
il programma dimostrativo (magari BCB3.0 lo puo' compilare).
Massimo

occorre installare VISUAL C++
questi header sono in c:\programmi\devstudio\vc\include

Newsgroup: it.comp.lang.c++
Titolo: Chiamate C++ da C





Io ho la necessita' di trovare un sistema piu' o 
meno pulito che mi permetta di 
richiamare routine C++ da routine C. 
Grazie!



 wrote in message
news:000701bf8c34$0b1f4550$6402...@wap.mi.atos.it...
Io ho la necessita' di trovare un sistema piu' o meno pulito che mi permetta
di
richiamare routine C++ da routine C. Grazie!
Dichiara extern "C" le routine C++ che vuoi chiamare da C.
Ricordati, naturalmente, che non puoi avere gli overload,
i namespace, ecc ecc.  Questi, chiamando da C, sono proprio
impossibili.
Alex

Newsgroup: it.comp.lang.c++
Titolo: Font per BorlandC++31

Ciao, mi chiamo Daniele De Luca, sto programmando in BorlandC++3.1(DOS)
e vorrei usare dei font più belli di quelli che sono forniti normalmente.
Sto parlando dei file .CHR (es: bold.chr o litt.chr). Se ne possono trovare altri?
Dove ?
Grazie mille.
Ciao.
Daniele.
--
Automatic posted from 
maggiore.dsnet.it
 [195.32.0.15]
via Mailgate Server - 
http://www.mailgate.org

...
Ciao, mi chiamo Daniele De Luca, sto programmando in BorlandC++3.1(DOS)
e vorrei usare dei font più belli di quelli che sono forniti normalmente.
Sto parlando dei file .CHR (es: bold.chr o litt.chr). Se ne possono trovare
altri?
Dove ?
Prova a scaricare fe.exe. E' un editor che ti permette di modificare i font
.chr
Non ricordo bene da dove l'ho scaricato ma dovrebbe essere dalle parti di
www.borland.com/feedback.ftp
 ..... o qualche cosa del genere. Se poi non
riesci a trovarlo fammi sapere che te lo invio direttamente.
Ciao Andrea
_____________________________________
Email: sostituire "NOSPAM" con "flashnet"
Email: replace "NOSPAM" with "flashnet"

Newsgroup: it.comp.lang.c++
Titolo: DDK dove trovarlo...

Ciao sto cercando il kit di sviluppo DDK, dove posso trovarlo???
Ah... dimenticavo... se fosse gratuito sarei molto piu' contento :-))
Grazie.

E' gratuito. Potresti scaricarlo dalla Microsoft ma è ENORME. Ti conviene
cercare sui CD delle riviste del settore.
Newsgroup: it.comp.lang.c++
Titolo: error: insufficient contextual information to determine type

I have created a class that contains an instance of a second class. When 
i try to call a member function of the instance of the second class from 
a member function of the containing class, I get the following error 
message:
Insufficient contextual information to determine type.
I have generated the simplest sample I could come up with that 
duplicates this error, and it is attached below.  I am fairly new to 
programming and hope that I am not wasting anyone's time with this, but 
I have been searching the net and my reference texts for the past three 
hours trying to figure it out and am completely frustrated.  It must 
have something to do with the second class being user defined, because 
if I substitute a string object I have no problem manipulating it. 
Please help!
Sample code:
#include <iostream>
using std::cout;
class FirstClass {
public:
    FirstClass();
    void setFirstClassValue( int );
private:
    int firstClassValue;
};
FirstClass::FirstClass()
{
    firstClassValue = 7;
}
void FirstClass::setFirstClassValue( int newValue )
{
    firstClassValue = newValue;
}
class SecondClass {
public:
    SecondClass();
private:
    FirstClass instanceOfFirstClass();
};
SecondClass::SecondClass()
{
    instanceOfFirstClass.setFirstClassValue( 10 );  //The problem line
};
main()
{
    SecondClass instanceOfSecondClass();
    Return 0;
}

 };
...
Ciao.
Marco.

 }
-- 
Horst

Newsgroup: it.comp.lang.c++
Titolo: template e moduli

Ciao a tutti,
Sto facendo qualche esercizio con le classi template, però una cosa mi è 
poco chiara.
Se ho capito bene per le classi template non posso mantenere la 
definizione della classe in un file header separato.
Quindi scrivo definizione e implementazione tutto nel file che poi andrò 
ad includere. E' la strada giusta?
Grazie
Giuseppe

archimede ha scritto:

Ciao,
ci sono "inciampato" anch'io giusto un paio di giorni fa.
Qui
 
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.12
trovi un paio di soluzioni.
Enzo
Newsgroup: it.comp.lang.c++
Titolo: Eseguibili enormi con cygwin32

Ho scaricato e installato cygwin32 b20.1 ma ho un piccolo problema:
compilando e linkando hello.c ottengo un file da 293 Kb!! mentre
compilando e linkando hellp.cpp ottengo un file da 452 Kb!!
Sommando la dll di 446Kb sono quasi un mega per hellocpp !!
ecco i file e i comandi che uso per compilarli/linkarli
gcc pippo.c
gcc pippo.cpp -lstdc++
questi sono i file:
Hello.c
#include <stdio.h>
int main() {
	printf("Hello, world");
}
Hello.cpp
#include <iostream>
int main() {
	cout << "Hello, world";
}
Come faccio a capire se mi sta linkando un sacco di roba inutile? E
nel caso a impedirglielo?
P.S. nella versione b20.1 non e` incluso il tcl/tk dove lo trovo?
_____________________________________________________
mmi...@iname.non-mi-rompete.com
 <Matteo Migliavacca>
per rispondermi direttamente togli non-mi-rompete dall'indirizzo

gcc pippo.cpp -lstdc++
fai: "g++ pippo.cpp" e la librerie standard dovrebbero essere
linkate automaticamente
Per il problema delle dimensioni devi "strippare" gli eseguibili :
strip pippo.exe
A meno che tu non abbia particolari esigenze per usare
Cygwin32, ti consiglio caldamente di passare a Mingw32 :
http://www.xraylith.wisc.edu/~khan/software/gnu-win32
[Tcl/Tk per Cygwin32]
So che c'e` sulla pagina di Mumit Khan :
http://www.xraylith.wisc.edu/~khan/software/gnu-win32
-- 
Roberto Gerola
Email: 
roge...@tin.it
WWW: 
http://space.tin.it/computer/rgerola

Newsgroup: it.comp.lang.c++
Titolo: override in classe derivata

Questo codice mi da' errore dove ho segnato con //error
Ho provato sia con compilatore Microsoft VC++.NET che con gcc, in
entrambi i casi da' lo stesso errore.
Altri linguaggi ad oggetti quali Java e C# accettano correttamente
codice tradotto equivalente.
Perche' in C++ questo non e' possibile, c'e' qualche ragione profonda
o una semplice dimenticanza ?
class A
{
	public:
	A() {}
	virtual ~A() {}
	void funz(int x) {}
};
class B : public A
{
	public:
	B() {}
	virtual ~B() {}
	void funz(void * x) {}
};
int main(int argc, char* argv[])
{
	int n = 0;
	B b;
	((A&)b).funz(n); // ok
	b.funz(n); // error
	return 0;
}

 }
Perche' dovrebbe funzionare? B::funz() prende come argomento un
puntatore e non un intero. Alla linea precedente col cast fai in modo di
chiamare A::funz() e quella funziona correttamente.
Ciao,
Nicola

 };
Questo comportamento è risultato di una scelta di design, che è stata
spesso oggetto di discussione. Stroupstrup ne parla nel suo "The Design
and Evolution of C++". Se fai un ricerca con Google puoi trovare diversi
thread su questo argomento. La cosa viene discussa brevemente anche in un
paragrafo delle FAQ di comp.lang.c++.
Max
Newsgroup: it.comp.lang.c++
Titolo: Piccoli dubbi...

Con la dichiarazione:
const char sStringa[]
si dichiara un puntatore costante a stringa o un puntatore a una
stringa costante?
--
In un programmino ho trovato questo bellissimo esempio di leggibilita':
[...]
LPSTR pTemp=pLogText;
while(*pTemp++!=0)
	FieldLength++;
*(--pTemp)++=0;
[...]
che cosa diavolo fa' l'ultima riga?? ovvero, in che ordine sono
applicati gli operatori: prima * o ++? :o)
ciao
MerlinO
Sent via Deja.com 
http://www.deja.com/
Before you buy.

applicati gli operatori: prima * o ++? :o)
L'operatore ++ viene valutato alla fine dell'intera espressione (dopo
l'operatore *), in quanto è postfisso. -- invece viene valutato per primo.
Concordo nel fatto che è una pessima scrittura: pTemp viene decrementato e
incrementato 2 volte... (dove l'hai trovato questo pezzo di codice, nei
sorgenti di Windows?)
Domenico Barra

 stringa costante?
Intendi dichiarando un parametro formale di una funzione? Se si, stai
dichiarando un puntatore a carattere costante dove costante è il
carattere puntato, non il puntatore.
EMG

 MerlinO

 ha scritto:
[...]
| > const char sStringa[]
[...]
| Intendi dichiarando un parametro formale di una funzione? Se si, stai
| dichiarando un puntatore a carattere costante dove costante è il
| carattere puntato, non il puntatore.
si intendo in un parametro formale di una funzione, quando ho scritto
non ho pensato a metterlo in modo piu' esplicito...
| EMG
ciao
merlinO

 ha scritto:
[...]
| >*(--pTemp)++=0;
[...]
| L'operatore ++ viene valutato alla fine dell'intera espressione (dopo
| l'operatore *), in quanto è postfisso. -- invece viene valutato per
primo.
| Concordo nel fatto che è una pessima scrittura: pTemp viene
decrementato e
| incrementato 2 volte... (dove l'hai trovato questo pezzo di codice,
nei
| sorgenti di Windows?)
no, era una parte di un'applicazione della mia ditta, ma non escludo che
quel pezzo sia stato copiato e incollato da un esempio MSDN anche se a
dire il vero di cose cosi' brutte non ce ne ho mai trovato :o) purtroppo
c'e' chi pensa che scrivere queste schifezza fa' fico... :o)
| Domenico Barra
grazie e ciao
MerlinO
Newsgroup: it.comp.lang.c++
Titolo: Come si crea un file .exe per un file html autopartente?

Ciao a tutti, e scusate la mia stupida domanda...
Devo distribuire su CD un file .htlm e volevo creare un file .exe che una
volta
cliccato mi faccia partire la pagina html.
So anche che è possibile fare un cd autopartente con autorun.inf  senza
bisogno di avere
file .exe   Ma io sono un pò testardo e misono messo in testa di creare un
file exe
Qualcuno di voi mi saprebbe fare e con quale programma???   magari freeware
o
perlomeno facile
               Grazie a tutti quelli che mi aiuteranno.....  Marco
-- 
Posted from [212.141.54.101] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 So anche che è possibile fare un cd autopartente con autorun.inf  senza
se è solo per questo ti basta un file.bat:
apri notepad e scrivi questa semplice riga
start  
www.paginahtmlchetipare.it
e lo salvi come file.bat e il gioco è fatto
ciao
--
-------
sito: 
www.dadev.it
ultime: Ocx per irc testi freeware
-------

Ciao,
Questo newsgroup si occupa del linguaggio C++ in quanto tale, e non di
aspetti specifici di particolari implementazioni. Per questo non e' il
posto piu' adatto per porre domande specifiche come la tua.
Potresti avere piu' fortuna su uno dei seguenti gruppi:
Per Win32 (95, 98, NT): it.comp.programmare.win32
Per Dos/Win 3.x: it.comp.os.dos
Per Linux:      it.comp.os.linux.development
Per C++Builder: i gruppi borland.public.cppbuilder.*, disponibili sul
                server 
newsgroups.borland.com
 (prevalentemente in 
                inglese, ma si puo' postare anche in italiano)
Grazie,
Nicola Musatti
P.S. Alla faccia di Antonio...

Newsgroup: it.comp.lang.c++
Titolo: Menu In MFC

Come si può togliere la barra dei menu (IDR_MAINFRAME) da
un'applicazione Single Document senza usare :
CnomeapllicazioneApp::InitInstance(){
    ......................................................
    .......................................................
     m_pMainWnd->SetMenu(NULL);
    return TRUE;
}
--
Automatic posted from 
mail.tin.it
 [194.243.154.49]
via Mailgate Server - 
http://www.mailgate.org


Potrei dire anche una sciocchezza, ma io toglierei dalle risorse (vedi
AppStudio) il menu con ID = IDR_MAINFRAME...
Ciao.
Alberto G.

Newsgroup: it.comp.lang.c++
Titolo: Object Oriented Analysis

Salve.
Qualcuno sa dove potrei trovare un tutorial sull'Analisi Object Oriented?
(l'ideale sarebbe in formato PDF, ma forse chiedo troppo).
Grazie.

  
PGP 2.6.3i key available
--------------------

Ciao,
    intanto frequenta it.scienza.informatica.ing-software e fai molte
domande li ;-p
poi dai un'occhiata a 
www.analisi-disegno.com
 :-)
A presto :-)
Marco Abis
http://www.programmazione.it
  il sito Italiano di riferimento per IT
ab...@programmazione.it
Newsgroup: it.comp.lang.c++
Titolo: Dubbio

Ciao,
ho un dubbio. Se ho la seguente situazione:
class A
{
public:
int val1;
} ;
class B:public class A
{
public:
int val 2;
}
void main()
{
   B  *b = new B();
   delete (A *)b;
}
La domanda è: la memoria viene de-allocata correttamente? Andando a
fare il debug mi sembra che la risposta sia si, ma vorrei qualche
conferma / commento (è una pratica da evitare assolutamente??)
ciao

 conferma / commento (è una pratica da evitare assolutamente??)
È da evitare assolutamente la conversione del puntatore in stile C, semmai
usa reinterpret_cast che fa la stessa cosa ma è bruttissimo e nel codice
salta all'occhio come un canguro su una piastra di ottone rovente.
Inoltre, visto che nella classe B hai una nuova variabile, la distruzione
non dovrebbe funzionare, a meno che rendi virtuale il distruttore (cosa che
non vedo nel tuo codice). Ovviamente qualche compilatore sovraottimizzato
potrebbe cercare di eliminare una comune fonte di errori rendendo virtuali
tutti i distruttori di classi da cui vengono ereditate altre classi, per
cui potrebbe anche andare «bene», almeno apparentemente.
Per verificare, puoi definire una classe C:
struct C
{
        ~C() { std::cout << "Orpo!" << std::endl };
};
e usarla al posto di val2 nel tuo esempio, per vedere se il distruttore
viene chiamato.
Vedi quanto segue:
-----------------------------------------
#include <iostream>
class A
{
public:
        int val1;
};
class C
{
public:
        C() {}
        ~C() { std::cout << "orpo!" << std::endl; }
};
class B : public A
{
public:
        C c;
};
int main()
{
        B  *b = new B();
        delete reinterpret_cast<A*>(b);
        std::cout << "dopo delete" << std::endl;
        return 0;
}
-----------------------------------------
Il distruttore di C su G++ 4.1.2 non viene chiamato, ed è effettivamente
quello che ho chiesto. Se rendi ~A() virtuale, invece, ~C() viene chiamato.
Ovvio che se scrivi codice del genere nel codice di produzione hai già un
altro tipo di problemi ;-)
Ciao,
-Federico

conferma / commento (è una pratica da evitare assolutamente??)
Certo che lo è. Mi riferisco al "da evitare assolutamente".
Curiosità: perché vuoi - o hai bisogno di - farlo?
Credo che comportamenti di questo tipo, comunque, siano dipendenti
dalla piattaforma. Non vorrei che il caso che riporti fosse una
banalizzazione eccessiva della situazione reale che ti porta a fare la
domanda...

 Curiosità: perché vuoi - o hai bisogno di - farlo?
Forse sono io che sto delirando a causa della febbre ;-), ma non vedo
cosa ci sia di strano in quello che ha chiesto l'OP.
A me pare che stia cancellando l'istanza di una classe tramite un
puntatore alla classe base. Io gli consiglierei solamente di rendere
il distruttore di A virtuale (cosa tra l'altro non necessaria per una
corretta deallocazione della memoria in questo specifico esempio) e di
correggere i 3 o 4 errori di sintassi presenti nel codice.
Saluti,
The Librarian

puntatore alla classe base.
...senza un distruttore virtuale (come anche tu consigli) è un
suicidio bello e buono. Oltretutto cast di quel tipo sono da evitare.