Допустим, у нас есть эти четыре класса:Как можно повторно использовать функцию базового класса в производном классе
- BinaryTree,
- расширяющееся дерево (который является подклассом BinaryTree)
- BinaryNode и
- SplayNode (который является подклассом BinaryNode).
В классе BinaryTree У меня есть эти 2 функции, и в SplayTree я бы хотел использовать его повторно, потому что он работает так же, как и в SplayTree.
//BinaryTree.cpp
bool Find(const T &data) const
{
Node<T> *found = Find2(data, root);
//...
}
virtual Node<T> * Find2(const T &data, Node<T> *node) const
{
//...
}
//SplayTree.cpp
using BinaryTree::Find;
virtual SplayNode<T> * Find2(const T &data, SplayNode<T> *node) const
{
//...
}
Теперь проблема в том, когда у меня есть экземпляр расширяющегося дерева и зовем Найти двоичную :: Find2 вызываются вместо расширяющегося дерева :: Find2, который является тем, что я хочу.
Итак, как я могу это сделать?
EDIT:
Исправлены некоторые ошибки и переработан на вопрос, то я надеюсь, что это яснее.
Ответ, который вы приняли, не является решением вашей реальной проблемы, а отличается дизайном. Фактическая проблема заключается в том, что 'SplayTree :: Find2' не является переопределением' BinaryTree :: Find2' из-за различного набора аргументов. C++ не допускает ковариантных аргументов (только ковариантного возврата) в переопределяющих функциях. –