我在一次公司笔试中遇到了这个问题。类是这样的:
class DB
{
ABC *list;
public:
ABC *getlist();
ABC *addlast();
ABC *remove(x);
ABC *freelist();
.....
}
现在的问题是首先找到客户端可以自行修改列表的任何实例。因此客户端可以通过 getlist 获取指针并使用它或使用 ABC 类 API 对其进行更多修改。
- 如何防止客户修改它。可以制作什么样的类架构,不允许客户端这样做。
最佳答案
细节决定成败:他们希望您保留 DB API 的哪些方面。
最简单的方法就是正确封装 list
- 仍然使用你的伪代码风格......
class DB
{
ABC list; // I'd store by value unless there's a reason not to
public:
ABC getlist() const; // only get a copy
const ABC& getlistref() const; // another option...
void addlast(x);
void remove(x);
void freelist();
.....
};
其他选项包括使用迭代器(即 begin
和 end
函数)公开 list
,或提供 visit(VisitorFunctor&)
函数让客户端代码对列表中的每个元素执行某些操作。
关于c++ - 如何防止客户端修改列表对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28313792/