【问题标题】:Converting subclass to base class?将子类转换为基类?
【发布时间】:2018-04-10 02:34:55
【问题描述】:

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

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

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

     return rightSide;

   }

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-08
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-21
      • 1970-01-01
      相关资源
      最近更新 更多