gpt4 book ai didi

c++ - 关于C++继承的建议

转载 作者:行者123 更新时间:2023-11-30 05:44:24 26 4
gpt4 key购买 nike

我一直在使用继承在 C++ 中实现红黑树。我有 4 个类,节点、树、RBNode、RBTree。

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 中重新声明的情况下使用相同的函数。我想过在函数内部使用强制转换,但我怎么知道哪个类对象正在调用该函数。

请给我一些建议。我是 C++ 的新手。

最佳答案

继承未正确定义,或者 insert_node(Tree *t) 存在混淆,它是在 Node 而不是在 中定义的树

无论如何,下面的最小代码示例编译得很好:

class Tree; 
class Node
{
protected:
int data;
Node *left,*right, *parent;
public:
Node(int data=0) : data(data), left(nullptr), right(nullptr), parent(nullptr) {}
void insert_node(Tree *t) { cout << "Insert" << endl; }
};
class Tree
{
protected:
Node * root;
list<int> treedata;
public:
Tree() : root(nullptr) {}
};
class RBSnode : public Node {}; // public inheritance
class RBStree : public Tree {};

...
RBSnode n;
RBStree t;
n.insert_node(&t);

请注意,在没有 public 继承说明符的情况下,假定为私有(private)继承:在类中,您可以访问基类的所有 protected 和公共(public)成员,但在类之外,您看不到继承的成员。我想这就是发生在你身上的事。

关于c++ - 关于C++继承的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29867611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com