我正在研究一个由节点组成的二进制搜索树的问题。节点的属性包括字符串,指向左节点的指针和指向右节点的指针。我有一个名为TransactionNode的类,它是节点的子类。 TransactionNode具有一个int(用于销售金额)以及节点类中的相同属性。我有一个名为findBiggest的函数,该函数查找从TransactionNode出售的最高金额并返回对该TransactionNode的引用。我的问题是如何将节点类中的内容转换为TransactionNode? (我避免将二进制搜索树中的节点更改为TransactionNodes)
TransactionNode & BST::findBiggest()
{
TransactionNode * rightSide;
rightSide = this->mpRoot;
while (rightSide != nullptr)
{``
//find biggest transaction
}
return rightSide;
}
最佳答案
通常,如果需要检查基类指针指向的对象是否属于派生类类型,则可以使用dynamic_cast
在您的情况下,您可以尝试在while循环内进行操作:
TransactionNode* txnNode = dynamic_cast<TransactionNode*>(rightSide);
if (txnNode != nullptr)
{
int amtSold = txnNode->GetAmountSold();
}
您还可以考虑在基类中使用虚拟方法并依赖于多态性。通常,这是优于dynamic_cast的首选方法。但是,可能是您的Node类级别太高,不需要支持“ GetAmountSold()”方法,但这是您可以决定的。