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++ でこれを行う方法はありますか?

クラス名を呼び出して「this」キーワードを使用しようとしましたが、どちらも失敗しました。

ベストアンサー1

C++11: はい!

C++11以降では、これと同じ機能(委任コンストラクタ)。

構文は C# とは少し異なります。

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

C++03: いいえ

残念ながら、C++03 ではこれを行う方法はありませんが、これをシミュレートする方法は 2 つあります。

  1. デフォルト パラメータを使用して 2 つ (またはそれ以上) のコンストラクターを組み合わせることができます。

    class Foo {
    public:
      Foo(char x, int y=0);  // combines two constructors (char) and (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)
    {
      // ...
    }
    

見るC++FAQ エントリ参考のため。

おすすめ記事