我目前正在编写我的 B+ 树,这是我的代码结构供引用,这样我的后续问题就更有意义了:
Class BPlusTree{
// some functions, members.. etc
};
Class Node{
// some functions, members.. etc
}
现在,这是我的问题/困境,因为我的节点是它自己的一个类,如果我想将一个键/值对插入一个节点,我将不得不调用 BPlusTree 插入函数,该函数又调用Node自带的insert函数(我不能直接访问Node的私有(private)成员)。这对我来说似乎有点奇怪。
但是,如果我只是在我的节点类中执行此操作:
friend class BPlusTree;
我将能够访问 Node 的私有(private)成员,因此我不需要在 Node 类中创建插入函数,因为现在我的 BPlusTree 插入函数可以访问成员。
这种方法是好是坏?我正处在重构我的代码不会很痛苦的地步,所以我想我现在就问这个问题,以免为时已晚。
最佳答案
在 Node 类中添加 insert()
一点也不坏。如果当 BPlusTree::insert()
调用 Node::insert()
时你看起来确实很奇怪,请不要认为这种代码风格有很多优点.
我的回答可能是基于意见的。
有了 Node::insert()
节点就更完整了,它本身就是一个完整的类。 Node
类可以被您将来创建的许多其他类使用。因此,您不必一次又一次地编写 insert()
函数。
模块化正是上面这段话的意思。您的代码通过这种方式变得更加模块化。
我不反对与 BPlusTree
类交 friend ,但问题是当你制作 BPlusTreeImproved
或任何使用 Node
的东西时,你您还必须了解它才能使用 Node
。这意味着不断更改和重新编译 Node
的痛苦。
关于c++ - 关于使一个类成为另一个类的 friend 困境的 B/B+ 树的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42312432/