ホームページ >バックエンド開発 >C++ >C で無限再帰を行わずに相互依存するクラスを作成するにはどうすればよいでしょうか?

C で無限再帰を行わずに相互依存するクラスを作成するにはどうすればよいでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-12 08:38:02664ブラウズ

How can you create interdependent classes in C   without infinite recursion?

C の相互依存クラス : 前方宣言の利用

互いの型のオブジェクトを含む 2 つのクラスを作成しようとすると、次の問題が直接発生します。無限再帰。これを実現するには、ポインターと前方宣言を使用した回避策が必要です。

提供されたシナリオでは、foo クラスと bar クラス間の循環依存関係によりエラーが発生しています。これを解決するために、前方宣言を使用して、各クラスを定義せずにその存在を通知します。

// bar.h
#ifndef BAR_H
#define BAR_H

// Declares the existence of foo without defining it
class foo;

class bar {
public:
  foo* getFoo();
protected:
  foo* f;
};
#endif
// foo.h
#ifndef FOO_H
#define FOO_H

// Declares the existence of bar without defining it
class bar;

class foo {
public:
  bar* getBar();
protected:
  bar* f;
};
#endif

これらの前方宣言により、foo ヘッダーと bar ヘッダーを独立させることができ、循環参照を回避できます。ポインター メンバーを含む各クラスの完全な定義は、それぞれの .cpp ファイルで提供されます。

使用例:

#include "foo.h"
#include "bar.h"

int main(int argc, char **argv) {
  foo myFoo;
  bar myBar;
}

ここでプログラム前方宣言によりクラスが間接的に相互に認識できるため、コンパイルは成功します。相互にポインタを保存できるようになり、サイクルを断ち切り、相互依存するクラスの作成が可能になります。

以上がC で無限再帰を行わずに相互依存するクラスを作成するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。