将子类转换为基类?

时间:2018-04-10 02:34:56

标签: c++ oop inheritance type-conversion subclass

我正在研究一个问题,我们有一个由节点组成的二叉搜索树。节点的属性由字符串,指向左节点的指针和指向右节点的指针组成。我有一个名为TransactionNode的类,它是节点的子类。 TransactionNode具有int(对于销售量)以及来自节点类的相同属性。我有一个名为findBiggest的函数,它查找从TransactionNode销售的最高金额,并返回对该TransactionNode的引用。我的问题是如何将从节点类转换为TransactionNode的东西? (我正避免将二叉搜索树中的节点更改为TransactionNodes)

TransactionNode & BST::findBiggest()
{
    TransactionNode * rightSide;
    rightSide = this->mpRoot;

    while (rightSide != nullptr)
        {``
           //find biggest transaction
        }

     return rightSide;

   }

1 个答案:

答案 0 :(得分:1)

通常,如果需要检查基类指针指向的对象是否属于派生类类型,则使用dynamic_cast

在你的情况下,你可以在你的while循环中尝试:

TransactionNode* txnNode = dynamic_cast<TransactionNode*>(rightSide);
if (txnNode != nullptr)
{
     int amtSold = txnNode->GetAmountSold();

}

您也可以考虑在基类中使用虚方法并依赖多态。通常这是dynamic_cast的首选方式。但是,可能是您的Node类太高而且不需要支持“GetAmountSold()”方法,但这是您可以决定的。