a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 75|回复: 0

[考试试题] C++类成员属性的一种简洁实现(3)

[复制链接]
发表于 2012-7-31 21:53:42 | 显示全部楼层 |阅读模式
  所以我想到可以利用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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-20 00:45 , Processed in 0.222160 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表