C クラスはそれ自体をメンバーとして参照できますか?
C プログラムに取り組んでいて、次のようなものを作成したいというシナリオを想像してください。式ツリーを表すクラス。このクラス内で、ツリーを後置順に走査して評価するメソッドを定義するとします。ただし、実装を詳しく調べていくと、次のような複雑な問題に遭遇します。
`
<br>class Node {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">char *cargo; Node left; Node right;
};
あなたは、「左」と宣言できないことにがっかりしながら気づきました。 「ノード」タイプとして「右」。これは根本的な疑問を引き起こします: C クラスはそれ自体をメンバーとして含めることができますか?
制限を明らかにする
この質問に対する答えは、断固として「ノー」です。メンバーを「ノード」タイプとして宣言すると、無限再帰が作成されます。各 Node には他の 2 つの Node オブジェクトが含まれ、さらに 2 つの Node オブジェクトが無限に含まれます。この再帰的な定義により、オブジェクトのサイズが無限大になりますが、これは単純に現実的ではありません。
救済へのポインタの紹介
ただし、クラスはそれ自体をメンバーとして直接参照できません。 、ポインタを介してそれ自体への参照を維持できます。この問題に対処するクラスの修正バージョンは次のとおりです:
`
<br>class Node {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">char *cargo; Node* left; // Pointer to a Node Node* right; // Pointer to a Node
};
`
ポインターを使用すると、各ノードが同じノード内の他のノードを参照するツリー構造を維持できます。 クラス。これにより、無限再帰が発生することなく、式ツリーを効率的に走査して評価できるようになります。
以上がC クラスはそれ自体をメンバー変数として含めることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。