在实例化之前访问方法

时间:2012-02-16 04:22:33

标签: c++ class instantiation

我想访问类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

...
}

1 个答案:

答案 0 :(得分:1)

由于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指针返回施法操作的价值。