慎重使用Get/Set成员函数(二)Set函数和其他修改函数的替代办法
2011-07-19 13:07
316 查看
慎重使用Get/Set成员函数(二)Set函数和其他修改函数的替代办法
黄国强 2011-7-19
前文说到,尽量避免使用Get和Set这样的函数,下面介绍的是替代办法。
第一步,把Set中的函数参数都放到构造函数中。
第二步,把所有其他的修改函数都变成不变函数。
比如下面的代码:
class CSample
{
public:
void Plus(int x){m_nVal+=x;}
};
这个Plus函数就是典型的修改函数,需要改成这样的形式。 CSample Plus(int x)const;
上面两步完成后 ,上次的例子,应该变成这样:
class CSample
{
...
private:
int m_nVal;
public:
CSamle(int nVal = 0);
CSample Plus(int x)const{return CSample(m_nVal+x);}
...
};
显然这个CSample类变成了一个值对象。值对象的好处很多,举一个例子,如果在函数Plus内部出现了异常,可以安全的处理,因为原先对象并没有改变。
有的人担心效率问题,我觉得这是不必要的。现在的PC已经足够好了,编译器也足够的聪明,我们把程序写对才是最重要的,性能问题是等到真正出现了,我们再来考虑。
黄国强 2011-7-19
前文说到,尽量避免使用Get和Set这样的函数,下面介绍的是替代办法。
第一步,把Set中的函数参数都放到构造函数中。
第二步,把所有其他的修改函数都变成不变函数。
比如下面的代码:
class CSample
{
public:
void Plus(int x){m_nVal+=x;}
};
这个Plus函数就是典型的修改函数,需要改成这样的形式。 CSample Plus(int x)const;
上面两步完成后 ,上次的例子,应该变成这样:
class CSample
{
...
private:
int m_nVal;
public:
CSamle(int nVal = 0);
CSample Plus(int x)const{return CSample(m_nVal+x);}
...
};
显然这个CSample类变成了一个值对象。值对象的好处很多,举一个例子,如果在函数Plus内部出现了异常,可以安全的处理,因为原先对象并没有改变。
有的人担心效率问题,我觉得这是不必要的。现在的PC已经足够好了,编译器也足够的聪明,我们把程序写对才是最重要的,性能问题是等到真正出现了,我们再来考虑。
相关文章推荐
- 慎重使用Get/Set成员函数(三)Get函数替代办法-让类说话
- 慎重使用Get/Set成员函数(四)CSample可以被其他类做为返回值
- 慎重使用Get/Set成员函数(一)问题的提出
- ni_set()函数的使用 以及 post_max_size,upload_max_filesize的修改方法
- ini_set()函数的使用 以及 post_max_size,upload_max_filesize的修改方法
- C++ MFC 其他函数获得主对话框指针并使用成员的方法
- SetThreadAffinityMask 函数使用慎重
- std::set成员函数及简要使用方法
- ini_set()函数的使用 以及 post_max_size,upload_max_filesize的修改方法
- C++ MFC 其他函数获得主对话框指针并使用成员的方法
- 第3课 使用( Get...Set ) 函数
- cin cin.get() cin.getline() string类成员函数getline(cin,str)使用方法区别与联系
- ini_set()函数的使用 以及 post_max_size,upload_max_filesize的修改方法
- 函数调用缺少参数列表;请使用“&****Dlg::getThread”创建指向成员的指针”--多线程函数调用
- ini_set()函数的使用 以及 post_max_size,upload_max_filesize的修改方法
- 成员函数指针和其他类型的强制转换,使用一般指针调用成员函数
- 为什么子类不能访问基类的private成员(为什么要使用get,set方法)?为什么要这样设计?
- Get/Set函数和public成员变量
- 创建虚拟桌面的代码(重启桌面进程)(使用GetThreadDesktop,CreateDesktop,SetThreadDesktop等函数)
- ini_set()函数的使用 以及 post_max_size,upload_max_filesize的修改方法