Newsgroup: it.comp.lang.c++
Titolo: Assegnare Eventi

Ciao a tutti, avrei la necessità di creare una classe mia, con degli eventi
che scattano ad una determinata azione. Ovviamente da codice posso assegnare
l'evento ad una procedura. Potreste darmi qlc esempio al riguardo? Su come
richiamarlo all'interno della classe, dichiarlo, ecc...
Una cosa del tipo.
MiaClasse.OnEvento = EseguiProcedura;
Altra cosa, rapida rapida, esistono dei campi simili hai property di Delphi?
Cioè nella classe nei metodi potevo aggiungere una cosa di questo tipo
property Item : String read GetElemento write SetElemento.
Via codice potevo richiamarlo così
MiaClasse.Item = "Ciao";
Grazie e Ciao

 MiaClasse.Item = "Ciao";
No, il linguaggio C++ non prevedere getter (read) e setter (write) 
impliciti. La cosa piu' consigliata, in questo caso, e' semplicemente di 
rendere privato l'attributo e lasciare pubblici i metodi setter e 
getter, obbligando cosi' ad usare quelli.
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */

 Grazie e Ciao
ciao,
sbirish.

I Problema --- Proprietà
Uhm, ma nn si può fare una cosa del genere con __DECLSPEC??? Vagamente mi
pareva di aver sentito questo.
II Problema --- Eventi.
Come, non è C++? Dentro una classe faccio leggere dati da un socket e appena
arrivano richiamo la procedura. Ovviamente poi questo andrà assegnato ad una
procedura mia esterna dalla classe, vedi esempio precedente...



hai risposto alla persona sbagliata o non hai proprio letto quello che ho
scritto ed i llink=
sbirish.

 procedura mia esterna dalla classe, vedi esempio precedente...
Beh, inanzitutto il C++ non sa niente di socket, al massimo le librerie 
del sistema operativo che usi ne sanno qualcosa, e quindi gia' questo 
non starebbe dentro lo standard.
Continuo cmq a non capire bene il problema, sono lento io - anyway, 
sbirish credo ti abbia risposto in modo piu' competente di me, ed era al 
mio messaggio, non al suo, che dovevi rispondere :)


Beh, mi scuso, credo di aver fatto un po' di confusione. Cmq alla fine mi sa
che devo ancora capire bene un po' di cose. Tralasciando per il momento
quello delle proprietà, per quanto riguarda quello relativo al richiamo di
un "evento", dal link non ho capito cosa bisogna imparare. Il sito parla a
proposito di signal boot. Però non ho mica capito come implementarli... Ora
rileggo. Una cosa del tipo:
if assigned(FOnEvento) then FOnEvento(self)...
Scusare ancora, ma ho un sacco di idee...e sono difficili da implementare
perchè sn alle prime con il C++

 perchè sn alle prime con il C++
Mi sa che il tuo errore e' cercare di fare in C++ cio' che sei
abituato a fare in Delphi. Il C++ e' un linguaggio diverso, con molte
cose in piu' ed alcune in meno. Ti conviene procurarti un buon libro
ed imparare ad usarlo in modo naturale.
Ciao,
Nicola

Infatti è questo il problema, non trovo alquante istruzioni paragonabili a
quelle di delphi. In teoria ci devono essere. Almeno quella di assegnare ad
un evento una procedura...No?
Chiedo ancora pazienza...
E ringrazio tutti per l'aiuto e
"Nicola Musatti" <Nicola....@ObjectWay.it> ha scritto nel messaggio
news:a327cf48.03112...@posting.google.com...


 un evento una procedura...No?
no....
andiamo sul pratico coda devi fare?
Tommy

Allora ora provo a spiegare per bene. Ho una classe(fatta da me) chiamata
CClientSocket.
Dentro ad essa ho dei metodi come Connect, Send, ReadLn...
Ecco al momento per vedere se arriva qlc dal socket o per vedere se è
connesso devo lanciare un thread(questo non centra con la classe, è il
programma) che esegue questa operazione
while (true)
MiaClasseSocket.ReadLn(.........);
Ecco ovviamente lo stesso per la classe connect.
Ora volevo sapere se esiste un modo per creare degli eventi che appena fatti
scattare, volutamente da me, richiamano la procedura assegnata.
In questo caso dentro la classe nella procedura
CClientSocket::ReadLn() metterei una cosa di questo tipo
read(........);
    SE assegnata una procedura all'evento OnReceive
        eseguila, una cosa del tipo FOnReceive(self) (questo in delphi)
Così nella mia applicazione creo una procedura del tipo
void x();
{
printf("E' arrivata roba dal socket");
}
che verrà richiamata ogni volta che scatterà l'evento FOnReceive della
classe.
MiaClasseSocket.FOnReceive = x();
Forse adexo mi sono spiegato meglio...
Con questo sistema poi volevo sapere se era possibile creare delle
"proprietà" che possano essere cambiate mediante delle procedure.
MiaClasseSocket.Porta := 555;
Ovviamente non posso mettere la porta public, in quanto devo passare il
numero (555) ad una funzione che controlli se è valido e poi da lì mi cambia
il valore della porta...
Credo di aver finito.
Se qlc mi può dare una dritta(esempi molto graditi)
Grazie

 un evento una procedura...No?
Delphi e' un ambiente che confonde il linguaggio con aspetti come la
gestione degli eventi che sono tipici di un framework e non puri
elementi di programmazione, anche se facilitati da meccanismi di base
che li supportano.
In C++ puro non esiste niente di tutto questo; devi sceglierti una
libreria o un framework e studiarti come funzionano.
Ciao,
Nicola

 wrote:
Il C++ non ha sockets e non ha eventi.
Se ad esempio usi le winsocket allora potrai fare piu' o meno quello che
facevi, avere "eventi" etc... Ma questi dipendono dal sistema
operativo/libreria/frameword e non dal C++.
Quindi devi guardare in giro e vedere le alternative e scegliere quella che
rietieni migliore.
Tommy

per gestire messaggi serve un gestore...
processo secodario che periodicamente legge il messagio da tradurre.
void Thread(void*);
void Thread(void *pvoid)
{
 CClientSocket *socket;
 socket= (CClientSocket*)pvoid;
 socket->ClassThread();
 _endthread();
}
CClientSocket
{
private:
 DWORD messaggio;
public:
CClientSocket();
~CClientSocket();
 void ClassThread();
};
CClientSocket::CClientSocket()
{
 _beginthread(Thread,0,this);
}
void CClientSocket::ClassThread()
{
  // gestione del messaggio
 switch(messaggio){
 }
}

 > Infatti č questo il problema, non trovo alquante istruzioni paragonabili


 il valore della porta...
Questo, te l'avevo gia' detto, in C++ non e' possibile farlo 
implicitamente, ma solo esplicitamente. Ovvero, fai un metodo void 
setPorta(int nuovaPorta) ed un metodo int getPorta(). Pero', direi che 
questo e' un classico parametro da passare al costruttore, e poi 
lasciare non modificato per tutta la vita della classe. Comunque, 
dipende da quel che vuoi tu.


 > > Infatti è questo il problema, non trovo alquante istruzioni
