ホームページ >バックエンド開発 >C++ >C はコンストラクター チェーンをサポートしていますか? C# との比較はどうですか?

C はコンストラクター チェーンをサポートしていますか? C# との比較はどうですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-25 14:22:181005ブラウズ

Does C   Support Constructor Chaining, and How Does It Compare to C#?

C でのコンストラクターの連鎖

C# 開発者であれば、コンストラクター内から他のコンストラクターを呼び出す機能に精通しているかもしれません。 C# では、これはコンストラクター チェーンとして知られています。 C にも同様の機能がありますか?

C 11 以降

C 11 以降のバージョンでは、コンストラクターの連鎖は コンストラクターの委任 を通じてサポートされています。構文は C# とは少し異なります:

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

この例では、コンストラクター Foo(int y) はコンストラクター Foo(char x, int y) に委譲し、x は 'a' に設定されます。

C 03

残念ながら、コンストラクターの連鎖は C では直接サポートされていません。 03. ただし、この動作をシミュレートするには 2 つの主なオプションがあります:

1.デフォルトのパラメーター:

いくつかのパラメーターにデフォルト値を指定することで、複数のコンストラクターを組み合わせることができます:

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

2。 Init メソッド:

共通コードをプライベート メソッドに抽出します:

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) {
  // Shared initialization code
}

これらの手法は真のコンストラクター チェーンを提供しませんが、同様の機能を可能にします。

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

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