2012-02-16 92 views
2

我想訪問類InternalNode的getSurplus()方法。在實例化之前訪問方法

我有getSurplus()在「InternalNode.h」文件中定義。

「...」表示其他代碼。

如何從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

「children」的類型是什麼? – 2012-02-16 04:31:15

+0

這是一個指向「BtreeNode *」類型數組的指針 – Jason 2012-02-16 04:40:53

回答

1

由於childrenBtreeNode*對象的數組,並InternalNodeBtreeNode衍生,然後只要從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指針返回值。

+0

不,子[i]返回一個ptr給BTreeNode。 children = new BTreeNode * [size]; – CyberShot 2012-02-16 04:30:33

+0

你假設'children'中的所有指針都是'InternalNode'的實例,可能不正確。如果OP真的想這樣做,我覺得最好使用帶有NULL檢查的'dynamic_cast'。 – Naveen 2012-02-16 04:37:13

+0

我在添加,因爲你輸入該評論:) – Jason 2012-02-16 04:37:50