Newsgroup: it.comp.lang.c++
Titolo: VB : Property = VC++ : ?

Sarò stato un po' criptico nell'oggetto, ma non mi veniva nient'altro. In VB
scrivevo del codice tipo questo:
Private mvarX As Integer
Public Property Get X () As Integer
    X = mvarX
    MsgBox "Property Get X chiamata"
End Property
Public Property Let X (vNewValue as Integer)
    mvarX = X
    MsgBox "Property Let X chiamata"
End Property
Grazie a questo, potevo usare X come una normalissima variabile, con
l'aggiunta che le due Property fanno da "dogana" tra la variabile locale e
il resto di tutto il codice, ed eseguire controlli di ogni tipo. In C++, con
la mia esperienza, scriverei così:
class CX {
    int mvarX;
public:
    void X (int XX) {
        mvarX = XX;
        MessageBox "void X (int XX) chiamata";
    }
    int X () {
        return mvarX;
        MessageBox "int X () chiamata";
    }
};
Ora, se voglio usare tutto quanto ho scritto sopra, in VB scrivo così:
Debug.Print X
X = 555
ma in VC++, invece,
CX blabla;
cout << blabla.X();
blabla.X (555)           <---- E NON blabla.X() = 555: PERCHE'?
Non so se sono stato chiaro, in caso rispiego tutto...
--
E.G. er Cicca
er_c...@excite.com
ICQ # 18872702
"Art. 1: L'Italia è una Repubblica progettata per Windows 98."

 blabla.X (555)           <---- E NON blabla.X() = 555: PERCHE'?
Perche' il C++ non ha il concetto di properties.
In generale potresti fare qualcosa del tipo
class MyClass {
public:
    m_IntX;
}
MyClass ThisInstance;
ThisInstance.m_IntX = 10;
int i = ThisInstance.m_IntX;
cioe' usando una variabile membro di classe pubblica.
Se proprio vuoi usare un notazione funzionale allora
la notazione MyClass::X()=12; non ha alcun senso in C++.
Puoi scrivere delle funzioni di accesso ai membri della forma
int MyClass::get_X(){ return m_intX; }
void MyClass::set_X(int X){ m_intX=X; }
ed usarle piu' o meno come stai gia' facendo.
Se vuoi un parere, l'overloadind della funzione CX::X()
e' uno dei migliori modi di scrivere codice oscuro, dato che
la funzione X() non fa la stessa cosa con parametri diversi
(come protrebbe fare una funzione che stampa sia interi che float),
ma fa due cose completamente diverse.
--== Sent via Deja.com 
http://www.deja.com/
 ==--
---Share what you know. Learn what you don't.---

blabla.X (555)           <---- E NON blabla.X() = 555: PERCHE'?
perche`  "void CX::X()" non restituisce alcunche` cui potere assegnare.
Paolo
-----------------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------------------------

la funzione X() non fa la stessa cosa con parametri diversi
Perfettamente d'accordo!



Doverosa correzione.
Vedere pag 281 dello Stroustrup.
Purtroppo io vengo dal C, e i riferimenti li penso sempre come
puntatori o non li penso affatto.


scrivevo del codice tipo questo:
[snip]
In C++ non esiste il conceto di property, ma puo' essere realizzato
con un template. Guarda come e' implementato nelle librerie VDK
(guarda nella mia firma), il file e' include/vdk/vdkprops.h
--
(o-  T | If Bill Gate$ had a nickel for every time window$ crashed...
//\  U | ... oh, wait, he does...
V_/_ X | email: r.salmaso (at) 
flashnet.it
 | pinguin (at)
linuxfan.com
VDK (C++ GUI lib) 
http://www.guest.net/homepages/mmotta/VDKHome
VDKBuilder (RAD Tool) 
http://www.guest.net/homepages/mmotta/vdkbuilder