比方說,我們有這四個類:我如何能在派生類中重用基類功能
- 二叉樹,
- 伸展樹(這是一個子類二叉樹的),
- 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,這就是我想要的。
那麼,我該怎麼做呢?
編輯:
糾正了一些錯誤,並重構了quetion,我希望這是更清晰了。
您接受的答案並不是解決您的實際問題,而是一種不同的設計方法。實際的問題是由於不同的參數集合,'SplayTree :: Find2'不是'BinaryTree :: Find2'的重載。 C++不允許在覆蓋函數中使用協變參數(只有協變返回)。 –