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