2017-02-18 10 views
1

Я в настоящее время в процессе кодирования моего дерева B +, и это структура моего кода для справки, так что мой основной вопрос имеет смысл :Реализация дерева B/B + по отношению к созданию класса другом дилеммы другого класса

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

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

Теперь, вот мой вопрос/дилеммой, так как мой узел является классом самостоятельно, если я хочу, чтобы вставить ключ/значение пары в узел, я должен был бы назвать BPlusTree вставить функцию который, в свою очередь, вызывает собственную функцию вставки узла (я не могу напрямую обращаться к отдельным членам Node). Мне это кажется немного странным.

Однако, если бы я просто сделать это в моем узле Класс:

friend class BPlusTree; 

я смог бы получить доступ к закрытым членам узла и, таким образом, мне не нужно, чтобы сделать функцию вставки внутри класса Node, потому что теперь моя функция вставки в BPlusTree имеет доступ к элементам.

Этот подход хороший или плохой? Я нахожусь в том смысле, что рефакторинг моего кода не будет больно, поэтому я подумал, что попрошу об этом сейчас, пока не стало слишком поздно.

+0

Возможно, вас заинтересует следующее сообщение: [Как я могу удалить/реорганизовать объявление зависимости «друга» правильно?] (Http://stackoverflow.com/questions/27492132/how-can-i-remove-refactor- а-друг-зависимость декларирование-правильно) –

ответ

2

Добавление insert() в классе Node неплохое. Если это выглядит странно для вас, когда BPlusTree::insert() звонит Node::insert(), пожалуйста, не нужно иметь некоторые преимущества для этого стиля кода.

Ответ может быть основан на мнениях.

С узлом Node::insert() он более совершенен и является полноценным классом самостоятельно. Класс Node может использоваться многими другими классами, которые вы могли бы сделать в будущем. Поэтому вам не придется писать функцию insert() снова и снова.

Модульность - это именно то, что означает вышеуказанный параграф. Таким образом, ваш код становится намного более модульным.

Я не против friending в BPlusTree классе, но дело в том, что на следующий день вы делаете BPlusTreeImproved или что-нибудь, что использует Node вы будете иметь друг, что, как хорошо использовать Node. Это означает постоянную боль от изменения и перекомпиляции Node.

 Смежные вопросы

  • Нет связанных вопросов^_^