1
我一直在C++中使用繼承來實現紅黑樹。我有4個類,節點,樹,RBNode,RBTree。關於C++繼承的建議
class Node
{
protected:
int data;
Node *left;
Node *right;
Node *parent;
public:
Node();
Node(int data);
void print_node(ofstream &file);
Node * find_node(int data);
void insert_node(Tree *t);
void left_rotate_node(Tree *t);
void right_rotate_node(Tree *t);
void delete_node(Tree *t);
}
class Tree
{
protected:
Node * root;
list<int> treedata;
public:
Tree();
virtual Node * get_root();
virtual void set_root(Node *root_node);
void insert_into_tree();
void delete_from_tree();
virtual void print_tree();
}
RBNode和RBTree分別繼承Node,Tree。但是我不能使用Node類的功能。例如,函數void Tree::insert_node(Tree *t);
即使在類RBNode中,除函數接收RBTree作爲參數外,此函數也執行相同的工作。我怎樣才能使用相同的功能,而無需在RBNode中重新聲明它。我想在函數內部使用casting,但是我怎麼知道哪些類對象正在調用函數。
請給我一些建議。我是C++新手。
但我已經嘗試過這種方法,但left_rotate_node()和right_rotate_node()給出了很多seg故障。 –
@rohit我試着回答你的問題:「*我怎樣才能使用相同的功能,而不需要在RBNode中重新聲明*」。 segfaults可能有很多其他原因:通常它是指針管理和訪問nullptr的一些問題。我建議通過[MCVE](http://stackoverflow.com/help/mcve)發佈另一個具體問題,並實施相關功能 – Christophe