就业数据资源平台
当前位置:首页 > C语言程序设计
C++类成员属性的一种简洁实现(3)

  所以我想到可以利用C/C++中强大的武器宏,我们来定义几个宏
  #define PROP(T,X) __declspec(property(get= __get##X,put= __put##X))T X;
  #define GETPROP(T,X) __declspec(property(get= __get##X))T X; //只读属性
  #define SETPROP(T,X) __declspec(property(put= __put##X))T X; //只写属必
  #define GET(T,X) T __get##X(void)
  #define SET(T,X) void __put##X(T value)
  说明一下:T 代表属性的类型如int,double,CString,而X代表属性名称。如果你需要一个只读属性可以使用GETPROP,只写属性则可以使用 SETPORP,然后对应使用一个GET或SET,当然如果你用PROP,而只用了一个GET或SET,也没有错,只是在编译时会告诉你没有一个 __getXXX或__putXXX的方法。然后我们就可以这样来写我们的类。
  class CEmployee
  {
  private:
  int m_old;
  public:
  PROP(int ,Old)
  GET(int,Old)
  {
  return m_old;
  }
  SET(int,Old)
  {
  if( (value >0) && (value <60)) //这里的value你可把它和C#一样当做关键字
  {
  m_old = value;
  }
  else
  {
  m_old =20;
  }
  }
  };
  好了,我们要做的工作已经做完了。当然这种方法还是有很多问题,比如不能使用C#中常用的索引属性,静态属性等等。但是毕竟我们是C++程序员么,呵呵!最后,这种方法只是在VC下有用。
就业数据资源平台