?????? 属性,是面向对象程序设计中不可缺少的元素,广义的属性是用来描述一个对象所处于的状态。而我们这篇文章所说的属性是狭义的,指能用“=”操作符对类的一个数据进行get或set操作,而且能控制get和set的权限。
??????? 先看一下代码:
#include
#include
#include
#include
using namespace std;
?
class propertytest
{
?int m_xvalue;
?int m_yvalues[100];
?map m_zvalues;
public:
?__declspec(property(get=GetX, put=PutX)) int x;
?__declspec(property(get=GetY, put=PutY)) int y[];
?__declspec(property(get=GetZ, put=PutZ)) int z[];
?int GetX()
?{
??return m_xvalue;
?};
?void PutX(int x)
?{
??m_xvalue = x;
?};
?
?int GetY(int n)
?{
??return m_yvalues[n];
?};
?void PutY(int n,int y)
?{
??m_yvalues[n] = y;
?};
?string GetZ(string key)
?{
??return m_zvalues[key];
?};
?void PutZ(string key,string z)
?{
??m_zvalues[key] = z;
?};
};
int main(int argc, char* argv[])
{
?propertytest test;
?test.x = 3;
?test.y[3] = 4;
?test.z["aaa"] = "aaa";
?std::cout
?std::cout
?std::cout
?getch();
?return 0;
}
???
?????? 请注意程序中属性的定义方法:
?__declspec(property(get=[get方法名], put=[put方法名])) [类型] [属性名];
??????? __declspec(property)实际上就是做了一个映射,把你的方法映射成属性,以供访问。get和put就是属性访问的权限,一个是读的权限,一个是写的权限。你可以根据需要来决定get和put两种权限的取舍。
相关文章:
第一章 VC中的“__declspec”能作什么(1)-定义接口
第二章 VC中的“__declspec”能作什么(2)-为类增加属性
?