として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 つあります。
デフォルト パラメータを使用して 2 つ (またはそれ以上) のコンストラクターを組み合わせることができます。
class Foo { public: Foo(char x, int y=0); // combines two constructors (char) and (char, int) // ... };
共通コードを共有するには、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 エントリ参考のため。