C++ 派生类的超隐函数
我在用AVL树调用重写函数时遇到一些问题。它正在呼叫BST树上的那个。这比通常更令人困惑,因为AVLNode是从BinaryNode派生的。我需要添加一个高度数据成员。这可能是造成问题的原因,还是比这更简单C++ 派生类的超隐函数,c++,inheritance,overriding,C++,Inheritance,Overriding,我在用AVL树调用重写函数时遇到一些问题。它正在呼叫BST树上的那个。这比通常更令人困惑,因为AVLNode是从BinaryNode派生的。我需要添加一个高度数据成员。这可能是造成问题的原因,还是比这更简单 class BST { public: Parent():root(NULL) { } void insert( const string & x, int lineNum, int& count ) { inse
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
};
BST类
{
公众:
父():根(空){}
无效插入(常量字符串和x、整数行数、整数和计数)
{
插入(x,lineNum,root,count);
}
受保护的:
二进制节点*根;
无效插入(常量字符串和x、整数行数、节点*&t、整数和计数)
{//东西
}
};
AVL类:公共BST
{
公众:
无效插入(常量字符串和x、整数行数、整数和计数)
{
cout您需要将要覆盖的函数设置为虚拟。例如:
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*的方法。它将创建insert方法的新重载
另外,需要明确的是,没有理由通过引用传入指针,除非您打算更改函数中指针(而不是指向的指针)的值,并希望更改在调用方中可见。通过引用传入只会添加不必要的取消引用(根据上述警告).如何创建AVL树以及如何调用方法?添加virtual似乎解决了一些问题。它修复了insert,但当我在重写并返回AVLNodes而不是BSTNodes的函数时仍然遇到问题。这是不可能的吗?如果您试图更改的只是返回类型,您将bably得到一个错误(我知道)。如果您正在更改参数中的任何内容(如您给出的Node->AVLNode示例),它将重载而不是重写。