辅导:C++基础(C++中的属性)
来源:优易学  2011-11-11 13:10:11   【优易学:中国教育考试门户网】   资料下载   IT书店

  C#中有属性(Property),而C++中却没有,其实属性对于C++而言也是非常重要的,请往下看。
  什么是属性
  属性就像那些可以存储数据的变量,但在从它们中读写数据时会引发事件,换句话来说,属性就是一个有互作用的变量,自我更新,并在读写其自身时产生不同的值。
  使用像C#这样包含属性的语言非常容易编写一个类,但对C++来说似乎就不太可能了,因为C++的编译器不支持C#那种形式的属性。正因为此,本文就是要介绍如何编写带有像C#中属性的C++类。
  为什么属性很重要
  如果你需要编写一个代表人物的对象,这个对象可能包含以下数据:全名、年龄、出生年月、性别。如果用C++来编写,代码如下:
  class Person {
  public:
  Person( ){}
  virtual ~Person( ){}
  private: //数据成员
  char m_fName[20];
  char m_lName[20];
  UINT m_YearOfBirth;
  bool m_bGender;
  };
  注意:在大多数情况中,不能为了可直接使用,就定义一个数据成员为public,因为数据成员应由对象内实现的业务逻辑来维护。
  如果需要设置或读取m_bGender的值,就可能要实现以下的方法:
  class Person {
  public:
  Person( ){}
  virtual ~Person( ){}
  void SetGender(bool bGender) {m_bGender = bGender;}
  bool GetGender() {return m_bGender;}
  private: //数据成员
  char m_fName[20];
  char m_lName[20];
  UINT m_YearOfBirth;
  bool m_bGender;
  };
  这种方法的弊端在于必须要事先知道其名称与用途,要是使用属性,就简单多了,青年人网站提示所需了解的只是属性名而已,且单个属性能支持不同的数据类型,也就是说,在上例中,可让Gender接受字符串或布尔类型,如下所示:
  Person.Gender = "Male";
  或:
  Person.Gender = true;
  属性声明
  现在,来看如何编写属性,就从Gender属性开始吧:
  class Person {
  public:
  Person( ){}
  virtual ~Person( ){}
  Begin_Property(char*,Gender)
  __get(char*,Gender)
  _set(char*);
  _get(bool);
  _set(bool);
  __release(Gender)
  End_Property(Gender)
  private: //数据成员
  char m_fName[20];
  char m_lName[20];
  UINT m_YearOfBirth;
  bool m_bGender;
  };
  代码中使用Begin_Property宏开始定义一个属性,它接受两个参数:属性数据类型及属性名。因为Gender属性是一个字符串属性,所以它应为char *。之后,还需要声明事件get()与set(),用于引发事件,如下所示:
  // 这会引发 _set(bool) 事件
  Person.Gender = true;
  // 这会引发 _get(bool) 事件
  bool gender = Person.Gender ;
  // 这会引发 _set(char*) 事件
  Person.Gender = "Male";
  // 这会引发 _get(char*) 事件
  printf("Gender :%s\n",(char*)Person.Gender);
  _get与_set是两个宏,分别接受一个参数,而这个参数代表了属性可接受的数据类型,你可看到_get与_set事件的数据类型独立于属性的数据类型,换句话来说,尽管Gender属性的数据类型为char *,但它也可接受布尔类型。
  最后两个宏为:_release,其释放它分配的内存;End_Property,其结束属性声明,两个宏都接受属性名为参数。

[1] [2] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训