【发布时间】:2014-05-26 02:41:11
【问题描述】:
在我的实现中,我有一个主类Tree,其中包含许多Nodes。每个Node 都包含一个指向下一个Node 的指针,如果没有实现它可以为NULL。 Tree 跟踪节点总数。
通过Tree 实现了一个搜索功能,该功能返回Node 指针。但是,如果 Node 尚不存在,则会创建一个新节点。这会增加 Tree::m_totalnodes 变量。但是,Tree::GetNode 是 const,但此修改不提供任何警告、错误或运行时故障。这是什么原因(可能与tbNode::m_tree 是非常量有关)?
class Node; //forward declare
class Tree {
public:
Tree() : m_totalnodes(0) {
m_firstnode = new Node(this,0);
}
Node* GetNode(int nodenumber) const { //note const! Should not modify Tree
return m_firstnode->FindNode(nodenumber); //this function eventually modifies it (and no warning)
}
private:
friend class Node;
unsigned int m_totalnodes;
Node* m_firstnode;
};
class Node {
public:
Node(Tree *thetree, int nodenumber) : m_tree(thetree), m_nextnode(NULL), m_nodenumber(nodenumber) {
m_tree->m_totalnodes++;
}
Node* FindNode(int nodenumber) {
if (!m_nextnode)
m_nextnode = new Node(m_tree, nodenumber);
return m_nextnode;
}
private:
Tree* m_tree;
Node* m_nextnode;
unsigned int m_nodenumber;
};
【问题讨论】: