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