关于C ++继承的建议

时间:2015-04-25 16:11:13

标签: c++ inheritance

我一直在使用继承来实现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 ++的新手。

1 个答案:

答案 0 :(得分:1)

未正确定义继承,或Node上有Tree而非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

请注意,如果没有{{1}}继承说明符,则假定私有继承:在类中,您可以访问基类的所有受保护和公共成员,但在外部,类,您不能;看到继承的成员。我想这是发生在你身上的事情。