gpt4 book ai didi

c++ - const 函数最终通过友元类修改自身

转载 作者:行者123 更新时间:2023-11-28 02:47:44 25 4
gpt4 key购买 nike

<分区>

在我的实现中,我有一个主类Tree,其中包含许多Node。每个 Node 都包含一个指向下一个 Node 的指针,如果未实现则可以为 NULL。 Tree 跟踪节点总数。

通过 Tree 实现了一个搜索功能,它返回 Node 指针。但是,如果 Node 尚不存在,则会创建一个新节点。这会增加 Tree::m_totalnodes 变量。但是,Tree::GetNode 是常量,但此修改不会提供任何警告、错误或运行时故障。这是什么原因(可能与 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;
};

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