我想访问类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
...
}
最佳答案
由于children
是BtreeNode*
对象的数组,并且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<>()
(即,现在BtreeNode
是InternalNode
的唯一基类,它不是虚拟基类,等等)。 。否则,如果您希望以一些运行时开销为代价的安全,请使用dynamic_cast<>()
并检查强制类型转换操作中NULL
指针的返回值。