gpt4 book ai didi

c++ - 限制上课

转载 作者:行者123 更新时间:2023-11-30 03:43:45 25 4
gpt4 key购买 nike

我有一些类 - 我们称它为 MyMutableClass,它实现了 MutableInterface

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

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

怎样才最有礼貌?我是否应该创建一个额外的 ImmutableInterfaces,只有 getter 并由 MutableInterface 继承它?然后我可以选择将哪一个传递给代码的另一部分。

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

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

最佳答案

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

继承描述了一种“是一种”接口(interface)。派生物“是一种”基础物。

const 不是“一种”可变的东西。这是一成不变的事情。

可变的东西不是“一种”不可变的东西。它恰好是可变的。

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

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

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

// 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;
};

关于c++ - 限制上课,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35934954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com