B/B+ Tree 的实施与使 class 成为另一个 class 困境的朋友有关

Implementation of B/B+ Tree in relation to making a class a friend of another class dilemma

我目前正在编写我的 B+ 树,这是我的代码结构供参考,这样我的后续问题就更有意义了:

Class BPlusTree{
 // some functions, members.. etc
};

Class Node{
 // some functions, members.. etc
}

现在,这是我的 question/dilemma,因为我的节点是它自己的 class,如果我想将 key/value 对插入节点,我必须调用 BPlusTree 插入函数,该函数又调用节点自己的插入函数(我不能直接访问节点的私有成员)。这对我来说似乎有点奇怪。

但是,如果我只是在我的节点中执行此操作 Class:

friend class BPlusTree;

我将能够访问 Node 的私有成员,因此我不需要在 Node 中创建插入函数 class 因为现在我的 BPlusTree 插入函数可以访问成员。

这种方法是好是坏?我正处在重构我的代码不会很痛苦的地步,所以我想我现在就问这个问题,以免为时已晚。

在节点 class 中添加 insert() 一点也不坏。如果 BPlusTree::insert() 调用 Node::insert() 时你觉得它确实很奇怪,请不要认为这种代码风格有很多优点。

我的回答可能是基于个人意见。

有了 Node::insert() 节点就更完整了,它本身就是一个成熟的 class。 Node class 可用于您将来可能创建的许多其他 classes。因此,您不必一次又一次地编写 insert() 函数。

Modularity就是上面这段话的意思。您的代码通过这种方式变得更加模块化。

我不反对与 BPlusTree class 成为朋友,但问题是,当你成为 BPlusTreeImproved 或任何使用 Node 的人时,你必须朋友说还不如用Node。这意味着更改和重新编译的持续痛苦 Node.