我正在研究一个由节点组成的二进制搜索树的问题。节点的属性包括字符串,指向左节点的指针和指向右节点的指针。我有一个名为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()”方法,但这是您可以决定的。

10-08 19:25