複数のオブジェクトコンストラクタを必要とするC++オブジェクトを作成しようとしています。 Foo()
とFoo(int)
とし、Foo(int)
はFoo()
となります。簡略化されたコードは、以下に書かれている:結果は予想通りsetX
方法の動作を示すようC++クラスを別のコンストラクタから呼び出す方法
#include <iostream>
class Foo{
private:
int iX;
public:
void printX(string sLabel){
cout << sLabel << " : " << " Foo::iX = " << Foo::iX << endl;
};
void setX(int iX){
Foo::iX = iX;
Foo::printX("setX(void) Method");
};
Foo(){
Foo::iX = 1;
Foo::printX("Foo(void) Constructor");
};
Foo(int iX){
Foo::setX(iX);
Foo::printX("Foo(int) Constructor");
Foo::Foo();
Foo::printX("Foo(int) Constructor");
};
};
int main(int argc, char** argv){
Foo bar(2);
return 0;
}
出力が
setX(void) Method : Foo::iX = 2
Foo(int) Constructor : Foo::iX = 2
Foo(void) Constructor : Foo::iX = 1
Foo(int) Constructor : Foo::iX = 2
あります。 Foo::iX
は、その機能のスコープの内側と外側の2
に等しい。
Foo(void)
コンストラクタをFoo(int)
コンストラクタ内から呼び出すときは、Foo::iX
はそのコンストラクタ内でのみ1
にとどまります。その方法を終了すると、すぐに2
に戻ります。
だから私の質問は2倍です:
- なぜCは、(コンストラクターが割り当てられていた値をせずに別のコンストラクタ内から呼び出すことはできません)これを振る舞う++のでしょうか?
- 複数のコンストラクタシグネチャを作成するにはどうすればよいですか?
ご協力いただければ幸いです。
おかげ
_delegating constructors_を読んでください。 _member initialization_も読んでください。たとえば、[ここ](http://en.cppreference.com/w/cpp/language/initializer_list)。 –