我想访问类InternalNode的getSurplus()方法。

我在“InternalNode.h”文件中定义了getSurplus()。

“...”表示其他代码。

如何从InternalNode类引用方法getSurplus?

//InternalNode.h
{
class InternalNode:public BTreeNode

{
 ...

 void remove(int a);
 int getSurplus() const;
 ...
 }

}



int InternalNode::getSurplus() const
{
 return (count - (internalSize + 1) / 2);
}

//
BTreeNode* InternalNode::remove(int value)
{
...

if (children[i]->getSurplus() >= 0) return SURPLUS; //Not correct syntax

...
}

最佳答案

由于childrenBtreeNode*对象的数组,并且InternalNode是从BtreeNode派生的,因此,假设children[i]返回的指针实际上是指向InternalNode对象的指针(而不是BtreeNode的其他派生对象),则必须显式转换指向类型InternalNode*的指针。可以这样完成:

if (static_cast<InternalNode*>(children[i])->getSurplus() >= 0)

如果您是,但不确定是否每个BtreeNode*都指向InternalNode对象(即,它可能指向其他派生类型),那么您将必须使用dynamic_cast<InternalNode*>(children[i]),并检查以确保操作返回有效的指针,而不是NULL

因此,如果您完全确定数组中的类型,则可以在这种情况下使用static_cast<>()(即,现在BtreeNodeInternalNode的唯一基类,它不是虚拟基类,等等)。 。否则,如果您希望以一些运行时开销为代价的安全,请使用dynamic_cast<>()并检查强制类型转换操作中NULL指针的返回值。

07-24 20:32