ホームページ >バックエンド開発 >C++ >C コンストラクターはチェーンできますか?チェーンできる場合はどのようにすればよいですか?

C コンストラクターはチェーンできますか?チェーンできる場合はどのようにすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-21 02:58:13171ブラウズ

Can C   Constructors Be Chained, and If So, How?

C でコンストラクターの連鎖を実行できますか?

C# では、特定の順序でコンストラクターを呼び出す機能が一般的です。この機能を C で再現しようとしている C# 開発者として、次の疑問が生じます: コンストラクター チェーンを通じて実現できるでしょうか?

C 11 以降

喜んでください! C 11 では、C# で見られるコンストラクターの連鎖を模倣する委任コンストラクターとして知られる機能が導入されています。記述方法は次のとおりです:

class Foo {
public:
  Foo(char x, int y) {}
  Foo(int y) : Foo('a', y) {}
};

C 03: 別のアプローチ

C 03 には直接コンストラクターの連鎖がないにもかかわらず、2 つの回避策が存在します:

デフォルトのパラメータ: デフォルトを使用してコンストラクタを結合しますパラメータ。

class Foo {
public:
  Foo(char x, int y=0); // Combines two constructors (char) and (char, int)
};

初期化メソッド: 共有初期化メソッドを利用します。

class Foo {
public:
  Foo(char x);
  Foo(char x, int y);

private:
  void init(char x, int y);
};

Foo::Foo(char x) : init(x, int(x) + 7) {}
Foo::Foo(char x, int y) : init(x, y) {}

void Foo::init(char x, int y) {}

結論として、C 11 は真のコンストラクター チェーンを有効にし、C 03 は回避策を提供します。同様の機能を実現するデフォルトのパラメータや init メソッドなど。

以上がC コンストラクターはチェーンできますか?チェーンできる場合はどのようにすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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