我在使用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
};
答案 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 *的方法。它将创建插入方法的新重载。
另外,为了清楚起见,没有理由通过引用传递指针,除非您打算更改函数中指针的值(而不是指向的)并希望更改在调用者中可见。通过引用传递将添加一个不必要的解引用(取决于上述警告)。