限制访问课程

时间:2016-03-11 07:54:39

标签: c++

我有一些课程 - 让我们称之为MyMutableClass,实现MutableInterface

class MutableInterface {
  public:
    void setMyPreciousData(int value);
    int getMyPreciousData() const;
    .... //and so on
};

但是代码的很大一部分,不应该改变这个类实例的状态,但它需要具有读访问权。

如何以最礼貌的方式做到这一点?我应该创建一个额外的ImmutableInterfaces,仅使用getter并通过MutableInterface继承它吗?然后我可以选择将哪一个传递给代码的另一部分。

第二个选项是创建另一个类,该对象将封装MutableInterface实现并仅提供对其方法子集的访问。那更好吗?

是否有一些众所周知的模式,我不知道?

1 个答案:

答案 0 :(得分:2)

这不是你想听到的,但我认为在这种情况下说的很重要。

继承描述了'是一种'接口。派生的东西'是一种'基础的东西。

const的东西不是'一种'可变的东西。这是不可改变的事情。

可变的东西不是'一种'不可改变的东西。这是一件恰好可变的事情。

可变性是事物的属性,而不是专业化。

因此,继承是错误的模型,这就是为什么在c ++中,constness是属性,而不是接口。

如果你真的必须隐藏有时事物是可变的这一事实(人们想知道为什么),那么正如评论中所提到的,你可能想要某种代理视图类,例如: / p>

// this is the actual thing
struct the_thing
{
    void change_me();
    int see_me() const;
};

// and this is the proxy

struct read_only_thing_view
{
    int see_me() const { return _reference.see_me(); }

    the_thing& _referent;
};