慎重使用Get/Set成员函数(四)CSample可以被其他类做为返回值
黄国强 2011-10-11在上文中,我们设计了一个去掉了Get/Set函数的值对象CSample。这次他作为COther 的成员,请见下面的例子。
// COther 包含了 CSample
class COther
{
...
public:
CSample& Get(void)const{return m_Sample;}
void Set(const CSample& aSample){m_Sample = aSample;}
private:
CSample m_Sample;
};
上面的COther我们不打算把他写成值对象,所以Set是允许的。
Get可以成立的理由有两个:
1 使用者虽然用Get获得了m_Sample的引用,但是由于CSample是值对象,他无法修改CSample内部的值。想要修改该值只有通过COther的Set函数,这样的设计,保证了以免修改了该值,COther类却没有得到通知。
2 返回的CSample类是领域类,没有暴露基本的类型。