我在公司笔试中遇到过这个问题。课程是这样的:
class DB
{
ABC *list;
public:
ABC *getlist();
ABC *addlast();
ABC *remove(x);
ABC *freelist();
.....
}
现在问题是首先找到客户端可以自己修改列表的任何实例。所以客户端可以通过getlist获取指针并使用它,或者使用ABC类API来修改它。
答案 0 :(得分:1)
魔鬼详细说明:他们希望您保留的数据库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();
.....
};
其他选项包括使用迭代器(即list
和begin
函数)公开end
,或提供visit(VisitorFunctor&)
函数让客户端代码对每个元素执行某些操作在列表中。