C でのコンストラクターの連鎖 : C# との比較
C# では、コンストラクターを連鎖させてオブジェクトを段階的に初期化できます。 C# 開発者としては、同様のメカニズムが C に存在するのではないかと疑問に思うかもしれません。
提供されている C# コード スニペットでは次のようになります。
class Test { public Test() { DoSomething(); } public Test(int count) : this() { DoSomethingWithCount(count); } public Test(int count, string name) : this(count) { DoSomethingWithName(name); } }
各コンストラクターはその先行コンポーネントを呼び出し、コンストラクターの順次初期化を可能にします。オブジェクトの状態。
C 11 およびその後
C 11 では、C# のコンストラクター チェーンと同様の機能を提供する委任コンストラクターと呼ばれる機能が導入されました。
class Foo { public: Foo(char x, int y); Foo(int y) : Foo('a', y) {}; };
この例では、Foo(int y) コンストラクターx および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 03 の場合、デフォルト パラメーターを使用するよりも柔軟性と潜在的なパフォーマンス上の利点があるため、一般に init メソッド手法が好まれます。
以上がC のコンストラクター チェーンは C# の実装とどう比較しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。