ホームページ > バックエンド開発 > C++ > C クラスはそれ自体をメンバー変数として含めることができますか?

C クラスはそれ自体をメンバー変数として含めることができますか?

Patricia Arquette
リリース: 2024-12-17 04:56:24
オリジナル
804 人が閲覧しました

Can a C   Class Contain Itself as a Member Variable?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
前の記事:コンパイルと構文の点で、C は C とどのように微妙に異なりますか? 次の記事:ファイルに書き込む際の C 構造体のパディングの不一致はどのようにして克服できますか?
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート