c++ - 关于使一个类成为另一个类的 friend 困境的 B/B+ 树的实现

标签 c++ class friend

我目前正在编写我的 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/

相关文章:

c++ - 如何设置 "discrete_distribution"c++的 vector

python - 在python中调用另一个文件中另一个类中的函数

iphone - 在与创建它的文件不同的文件中使用 NSString

C++ 对象数组

c++ - 如何确定调用堆栈结束?

c++ - 您必须使用无限循环才能有效地重用协程句柄?

python - PyTorch 中 'Module' 的定义到底是什么?

c++ - 类(class)传承与友元项目

c++ - 无法调用 friend 类的构造函数

c++ - 没有友元函数的两个类的私有(private)操作