所以我想到可以利用C/C++中强大的武器宏,我们来定义几个宏& L0 F6 T1 z6 V; n0 O- {9 j& x# R
#define PROP(T,X) __declspec(property(get= __get##X,put= __put##X))T X;; r$ c B+ `8 [ w) f
#define GETPROP(T,X) __declspec(property(get= __get##X))T X; //只读属性8 L2 h+ g& y3 u, s$ i
#define SETPROP(T,X) __declspec(property(put= __put##X))T X; //只写属必$ k: K6 a3 |/ I! c% L1 j2 A
#define GET(T,X) T __get##X(void)3 R, u- g) n6 N
#define SET(T,X) void __put##X(T value)
/ G0 J$ N8 m( @6 g4 m! ~ 说明一下:T 代表属性的类型如int,double,CString,而X代表属性名称。如果你需要一个只读属性可以使用GETPROP,只写属性则可以使用 SETPORP,然后对应使用一个GET或SET,当然如果你用PROP,而只用了一个GET或SET,也没有错,只是在编译时会告诉你没有一个 __getXXX或__putXXX的方法。然后我们就可以这样来写我们的类。( l$ j; U3 A+ T6 i3 k I) k! S
class CEmployee
4 l2 }& [4 R) Q" X {
$ j. e0 j9 j# o private:
. M" H9 z, P2 |2 r; E6 M% \ int m_old;0 p3 v4 ?& I+ ]7 M
public:# Y( S3 b( @" J/ Q4 L: _
PROP(int ,Old)$ M8 W1 A7 M! h3 h
GET(int,Old)
$ B& }5 C, t" b/ T; E. x6 L {
* D6 d! D5 q/ Z: a3 X. ?: d return m_old;
0 f+ }* A6 x" y! Y3 u }
7 e! ^0 o2 _. |2 i SET(int,Old)
6 w- u' _% Q- f w v9 b {
/ d" U, d* f6 x, s, g$ H& r) t( b( z if( (value >0) && (value |