gpt4 book ai didi

c++ - 在实例化之前访问方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:17 25 4
gpt4 key购买 nike

我想访问类 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强制转换操作的指针返回值。

关于c++ - 在实例化之前访问方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9305508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com