C++实现自动为对象添加“属性”访问代码

对于c#而言,一个类可以有成员变量、成员函数、和属性,然而在C++中却没有“属 性”这一概念。为了达到相同的效果,在C++中一般是采用get_XXX()和set_XXX()两个 函数来实现外部对成员变量的访问。这样做的弊端很明显,类的声明中多了很多冗余的代码 :

private:
int m_data;
public:
int get_data() const;
int set_data(int value);

为了定义一个data属性,需要写很多代码,事实上,我们想把上述代码编程一句,那么, 这个宏就可以实现:

#define AUTO_PROPERTY(type, name) \
private: type m_##name; \
public: type get_##name() const {return m_##name;} \
public: type set_##name(const type &value) \
{return m_##name, m_##name = value;}

然后我们就可以简化代码,增加可读性:

class class1
{
AUTO_PROPERTY(int, data)
};

这样,就实现了为class1增加一个名为data的属性,同时提供了基本的访问控制函数 get_data()和set_data()。当然这个宏能做到的仅仅是简化代码和增加可读性,并未提供一 种全新的“属性”模式。如果想自定义get_data()或set_data()函数,这个宏就 不够用了,所以,我再给出下面几个宏,可以达到自定义get,set函数的效果:

#define PROPERTY(type, name) \
private: type m_##name; \
public: type get_##name() const; \
public: type set_##name(const type &value);

#define PROPERTY_GET(classname, type, name) \
type classname::get_##name() const

#define PROPERTY_SET(classname, type, name) \
type classname::set_##name(const type &value)

使用举例:

class myclass
{
public:
PROPERTY(int, data)
};
PROPERTY_GET(myclass, int, data)
{
return m_data;
}
PROPERTY_SET(myclass, int, data)
{
return m_data = value;
}

当然,这只是我提供的一种简便方法,抛砖引玉而已,欢迎指教。

时间: 2024-08-03 04:01:27

C++实现自动为对象添加“属性”访问代码的相关文章

JS动态给对象添加属性和值的实现方法_javascript技巧

如下所示: var obj={}; for(var i=0;i<10;i++){ eval("obj.p"+i+"="+i); } 以上就是小编为大家带来的JS动态给对象添加属性和值的实现方法全部内容了,希望大家多多支持~ 以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索js 北京赛车冠亚和值技巧.时时彩和值技巧.福彩3d和值计算技巧.快3和值技巧.重庆时时彩和值技巧,以便于您获取更多的

Groovy探索之MOP 八 运行期内给类和对象添加属性或方法

我们都知道,在Groovy语言中,我们可以使用MOP特性在运行期内添加属性或方法. 这种添加包括两个层面的添加: 第一, 是给一个类添加属性或方法.也就是说,如果我们在运行期内给一个类添加了属性或方法,那么添加了以后,所有这个类实例化的对象,都将拥有了这个属性或方法. 第二, 第二,是给一个对象添加属性或方法.也就是说,如果我们在运行期内给一个对象添加了属性或方法,那么添加了以后,只有这个对象才拥有这个属性或方法.换句话说,如果我们再给这个对象的类实例化一个对象,那么该对象则不能拥有我们刚添加的

JavaScript中prototype为对象添加属性的误区介绍_基础知识

先上需要用到的全部代码片段(截取) 复制代码 代码如下: MenuControl.prototype.boxDisplay = false;//是否显示图层选择菜单 MenuControl.prototype.controlUI; MenuControl.prototype.show = function(){ if(pointControl.boxDisplay){ pointControl.hide(); } menuBoxDiv.style.display = ""; this.

js 遍历对象的属性的代码_javascript技巧

如: 复制代码 代码如下: Function.prototype.addMethod=function(methodName,func){ if(!this.prototype[methodName]){ this.prototype[methodName]=func;//给原型增加方法,此方法会影响到该类型的实例上 } return this.prototype;//返回原型,此类型实例可以进行链形调用 } function CustomObject(name,value){ this.nam

在python的类中动态添加属性与生成对象_python

本文将通过一下几个方面来一一进行解决       1.程序的主要功能       2.实现过程       3.类的定义       4.用生成器generator动态更新每个对象并返回对象       5.使用strip 去除不必要的字符       6.rematch匹配字符串       7.使用timestrptime提取字符串转化为时间对象       8.完整代码 程序的主要功能 现在有个存储用户信息的像表格一样的文档:第一行是属性,各个属性用逗号(,)分隔,从第二行开始每行是各个属

Javascript创建自定义对象:创建Object实例添加属性和方法

文章简介:创建自定义对象的最简单的方式就是创建一个Object实例,然后再为它添加属性和方法. 创建自定义对象的最简单的方式就是创建一个Object实例,然后再为它添加属性和方法,如下所示: var person = new Object(); person.name = "Nicholas"; person.age = "29" person.job = "Software Engineer"; person.sayName = functio

JavaScript中Boolean对象的属性解析_基础知识

constructor 属性 实例 返回通过 myvar 对象的原型创建的函数: var myvar = new Boolean(1); myvar.constructor; 结果输出: function Boolean() { [native code] } 定义和用法 constructor 属性返回对创建此对象的 Boolean 函数的引用. prototype 构造器为 Boolean 对象创建一个新的方法: Boolean.prototype.myColor=function() {

jquery动态遍历Json对象的属性和值的方法_javascript技巧

1.遍历 json 对象的属性 //定义json对象 var person= { name: 'zhangsan', pass: '123', fn: function(){ alert(this.name+"的密码="+this.pass); } } //遍历person属性包括方法,如果不想显示出方法,可用typeof(person[item])== "function"来判断 for(var item in person){ alert("perso

Javascript中prototype属性实现给内置对象添加新的方法

  本文实例讲述了Javascript中prototype属性实现给内置对象添加新的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" con