麻烦覆盖派生类的功能

时间:2012-10-02 05:45:16

标签: c++ inheritance function-overriding

我在使用AVL树调用重写函数时遇到了一些麻烦。它正在调用BST树中的那个。这比平常更混乱,因为AVLNode是从BinaryNode派生的。我需要添加一个高度数据成员。这可能导致问题还是比这更简单。

class BST
{
     public:
     Parent():root(NULL) { }
     void insert( const string & x, int lineNum, int& count )
     {
           insert(x, lineNum, root, count);
     }

     protected:
     BinaryNode* root;
     void insert( const string & x, int lineNum, Node * & t, int& count )
     {//stuff
     }
};

class AVL:public BST
{
     public:
     void insert( const string & x, int lineNum, int& count )
     {
        cout << "INSERT\n";   
        insert(x, lineNum, root, count);
     }
     protected:
     AVLNode* root;

     void insert( const string & x, int lineNum, AVLNode * & t, int& count )
     {
          cout << "insert\n";   
        //different stuff
     }
};

class BinaryNode
{//constructors
}

class AVLNode:public BinaryNode
{//constructors
};

1 个答案:

答案 0 :(得分:0)

您需要使要覆盖虚拟的功能。例如:

 virtual void insert( const string & x, int lineNum, int& count )
 {
       insert(x, lineNum, root, count);
 }

 virtual void insert( const string & x, int lineNum, Node * & t, int& count )
 {//stuff
 }

使用AVLNode *的insert方法不会覆盖Node *的方法。它将创建插入方法的新重载。

另外,为了清楚起见,没有理由通过引用传递指针,除非您打算更改函数中指针的值(而不是指向的)并希望更改在调用者中可见。通过引用传递将添加一个不必要的解引用(取决于上述警告)。