C++中的property库的设计与实现过程(一)
来源:互联网 发布:科学大数据与数字地球 编辑:程序博客网 时间:2024/06/06 19:57
虽然现在很忙,有很多事情要做,但是脑子里总在想一些稀奇古怪的事情而停不下来。比如说这个property,就是我最近睡觉前想的最多的东西。特别是前几天,不小心被关在实验室没法出去只好在这里睡觉,睡觉前又想到这个property,于是手痒,动手真的把粗糙的想法实现了一遍。
在说如何实现之前,首先应该说说什么是property,以及为什么要做这么一个东西。
property首先应该是Borland C++引入的新的C++关键字,它很方便但是不标准,C++标准化组织也从来没想过把它纳入标准。至今为止,我觉得最爽的property应该属于.Net里面的实现,比如说C#:
很容易发现,如果我愿意把X作为一个int暴露给外部随便改,那么我直接写
就可以把X变成普通成员了。相反亦然。
这样非常的方便,而且也使得设计人员变得更加的自由:因为他不需要担心今后会因为X要变成readonly、或者要检查输入、或者其他什么bt需求而对代码伤筋动骨,简简单单的选择实现get或set就好了,而对于X这个接口,却始终能够保持统一。
正因为property有这些好处而C++没有在语言这一层提供实现方法,property库就显得非常有必要了。不过还是必须看到,既然是实现C++非标准的东西,其代码肯定无法好看,那么这个property库也就只能设计成一个基础程序库的样子,他的用户是其他库的编写者。
OK,接下来,我就会开始讨论最基本的property的实现思路和遇到的第一个问题。<iframe frameborder="0" id="gn_notemagic" style="position: absolute; display: block; opacity: 0.7; z-index: 500; width: 16px; height: 20px; top: 671px; right: 401px;" src="http://www.google.com/gn/static_files/blank.html"></iframe>
在说如何实现之前,首先应该说说什么是property,以及为什么要做这么一个东西。
property首先应该是Borland C++引入的新的C++关键字,它很方便但是不标准,C++标准化组织也从来没想过把它纳入标准。至今为止,我觉得最爽的property应该属于.Net里面的实现,比如说C#:
public class Sample
{
private int x_;
public int X
{
get
{
return x_;
}
set
{
x_ = value;
}
}
// Something else...
}
{
private int x_;
public int X
{
get
{
return x_;
}
set
{
x_ = value;
}
}
// Something else...
}
很容易发现,如果我愿意把X作为一个int暴露给外部随便改,那么我直接写
// Treat X as a simple int.
public int X;
/*
{
get
{
return x_;
}
set
{
x_ = value;
}
}
*/
public int X;
/*
{
get
{
return x_;
}
set
{
x_ = value;
}
}
*/
就可以把X变成普通成员了。相反亦然。
这样非常的方便,而且也使得设计人员变得更加的自由:因为他不需要担心今后会因为X要变成readonly、或者要检查输入、或者其他什么bt需求而对代码伤筋动骨,简简单单的选择实现get或set就好了,而对于X这个接口,却始终能够保持统一。
正因为property有这些好处而C++没有在语言这一层提供实现方法,property库就显得非常有必要了。不过还是必须看到,既然是实现C++非标准的东西,其代码肯定无法好看,那么这个property库也就只能设计成一个基础程序库的样子,他的用户是其他库的编写者。
OK,接下来,我就会开始讨论最基本的property的实现思路和遇到的第一个问题。<iframe frameborder="0" id="gn_notemagic" style="position: absolute; display: block; opacity: 0.7; z-index: 500; width: 16px; height: 20px; top: 671px; right: 401px;" src="http://www.google.com/gn/static_files/blank.html"></iframe>
- C++中的property库的设计与实现过程(一)
- C++中的property库的设计与实现过程(三)——将对象封装到property里面
- C++中的property库的设计与实现过程(四)——消除讨厌的warning C4355
- C++中的property库的设计与实现过程(五)(第一部完)——为属性加入访问控制
- C++中的property库的设计与实现过程(二)——如何为属性指定get_和set_函数?
- C++:多线程类库的设计与实现(一)
- 《Redis设计与实现》[第二部分]单机数据库的实现-C源码阅读(一)
- C++:多线程类库的设计与实现(二)
- C++:多线程类库的设计与实现(三)
- C++:多线程类库的设计与实现(四)
- C++:多线程类库的设计与实现(五)
- C++:多线程类库的设计与实现(六)
- C++:多线程类库的设计与实现(七)
- Linux设计与实现原理笔记《一》从开机加电到main之前的过程
- 数据库技术之存储过程设计与实现(一)
- C语言队列的实现--学习组合设计(一)
- 《Redis设计与实现》[第一部分]数据结构与对象-C源码阅读(一)
- 使用存储过程实现进销存系统中的先进先出算法(1)——数据库与存储过程设计
- 成为符合ansi和unicode的应用程序
- 类继承中构造函数和析构函数的调用
- 表达式求值的两个版本
- 编写程序输出ASCII文件的字符数、单词数和行数
- 两个不同心态的七夕
- C++中的property库的设计与实现过程(一)
- 江湖中流传的“Google的十大彩色幽默”
- linux下crontab时间的格式说明
- 你看到我看到的了吗?
- Eric的行政区(省市)下列表控件和标签控件
- 庆祝Blog正式开通!
- 使Weblogic服务器的资源配置自动化
- 似乎经理要带我搞新模块了
- 用Spring JMS使异步消息变得简单