我想访问类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
...
}
答案 0 :(得分:1)
由于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
指针返回施法操作的价值。