https://stackoverflow.com/a/8839647/462608
静的初期化子を使用します。
public class MyClass { static { //init } }
C++で同様のことを行うことはできますか?
実際には、いくつかの変数を初期化する必要がありますが、オブジェクトを作成したくありません。
https://stackoverflow.com/a/8839647/462608
静的初期化子を使用します。
public class MyClass { static { //init } }
C++で同様のことを行うことはできますか?
実際には、いくつかの変数を初期化する必要がありますが、オブジェクトを作成したくありません。
変数がstatic
メンバーの場合、それらを初期化できるだけでなく、初期化する必要があります。
Java 初期化子リストに直接相当するものはありませんが、関数を呼び出して静的メンバーを初期化することで同様のことができます。
class X
{
static bool x;
}
bool foo()
{
//initialization code here
}
bool X::x = foo();
これは、論理が激しい場合に適しています。static
メンバーを初期化することだけが必要な場合は、 と同様に実行してくださいX::x
。
実際には、いくつかの変数を初期化する必要がありますが、オブジェクトを作成したくありません。
変数がクラス外にある場合は、それらを直接初期化します (そのためのコードを呼び出す必要はありません)。
変数がstatic
クラスのメンバーである場合は、上記のアプローチのいずれかを使用します。
変数がstatic
メンバーでない場合、それらはオブジェクトなしでは存在しません。
クラスの静的変数は、.cpp ファイルで初期化されます。
MyClass.h
class MyClass {
public:
static void f1();
static void f2();
private:
static int a1;
static int a2;
static int a3;
};
MyClass.cpp
int MyClass::a1 = 7;
int MyClass::a2 = 8;
int MyClass::a3 = MyClass::a1 + MyClass::a2;
void MyClass::f1()
{
a1 = 7;
}
void MyClass::f2()
{
cout << a2 << endl;
}
静的メンバー変数の重要な初期化が必要な場合は、コンストラクターを使用して内部クラスにグループ化します。
MyClass.h
class MyClass {
public:
static void f1();
static void f2();
private:
struct Data {
Data();
int a1;
int a2;
int a3;
};
static Data data;
};
MyClass.cpp
MyClass::Data MyClass::data;
MyClass::Data::Data() : a1(0), a2(0), a3(0)
{
// it is just an example ;)
for (int i = 0; i < 7; ++i)
{
a1 += 2;
s2 += 3;
a3 += a1 + a2;
}
}
void MyClass::f1()
{
data.a1 = 7;
}
void MyClass::f2()
{
cout << data.a2 << endl;
}