将子类转换为基类?
Posted
技术标签:
【中文标题】将子类转换为基类?【英文标题】: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;
【问题讨论】:
【参考方案1】:一般来说,如果需要检查基类指针指向的对象是否属于派生类类型,则使用dynamic_cast
在您的情况下,您可以在 while 循环中尝试:
TransactionNode* txnNode = dynamic_cast<TransactionNode*>(rightSide);
if (txnNode != nullptr)
int amtSold = txnNode->GetAmountSold();
您也可以考虑在基类中使用虚方法并依赖多态性。通常这是一种优于 dynamic_cast 的首选方式。但是,可能是您的 Node 类级别太高,不需要支持“GetAmountSold()”方法,但这是您可以决定的。
【讨论】:
以上是关于将子类转换为基类?的主要内容,如果未能解决你的问题,请参考以下文章