B / B + Tree的实现与使一个班级成为另一个阶级困境的朋友有关

时间:2017-02-18 07:28:22

标签: c++ class friend

我目前正在编写B + Tree的编码过程,这是我的代码的结构供参考,以便我的处理问题更有意义:

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

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

现在,这是我的问题/困境,因为我的Node是它自己的一个类,如果我想将一个键/值对插入一个节点,我将不得不调用BPlusTree插入函数,该函数又调用节点自己的插入功能(我无法直接访问Node的私有成员)。这对我来说似乎有点奇怪。

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

friend class BPlusTree;

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

这种方法好还是坏?我正在重构我的代码并不会让人痛苦,所以我想我现在就问这个问题为时已晚。

1 个答案:

答案 0 :(得分:2)

在Node类中添加package com.amit.practice; public class Test { public static void main(String[] args) { Test test= new Test(); int polyNum=test.polydrum(813123); System.out.println(polyNum); } public int polydrum(int number){ int finalNum=0; System.out.println("The given number is :"+number+" "); do { String revString = ""; String numString=""+number; int numLength=numString.length(); for(int i=numLength-1;i>=0;i--){ revString += numString.charAt(i); if(numString.equals(revString)){ System.out.println("The next polydrum number is :"+numString); finalNum=Integer.parseInt(revString); return finalNum; } } number=number+1; } while(finalNum!=number); return finalNum; } } 根本不是坏事。如果insert()调用BPlusTree::insert()时看起来很奇怪,请不要对这种代码风格有一些优势。

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

Node::insert()节点更完整,并且本身就是一个完整的类。 Node::insert()类可以被您将来可能使用的许多其他类使用。因此,您不必一次又一次地编写Node函数。

模块化正是上一段所指的内容。您的代码以这种方式变得更加模块化。

我并不反对与insert()课程建立联系,但问题是您制作BPlusTree的日期或使用BPlusTreeImproved的任何内容,您必须与朋友联系以及使用Node。这意味着不断变化和重新编译Node