メンバー初期化リストで静的メンバー変数を初期化しようとしました。メンバ初期化リストを介して静的メンバ変数を初期化できますか?
静的変数のようなエラーがたとえばコンストラクタ
経由で初期化することはできません。しかし、私は、私のクラスsample
はタイプint
の静的メンバ変数y
を持っていました。私はこれをすることができませんでした:
sample(int a):y(a){}
なぜそうですか?
メンバー初期化リストで静的メンバー変数を初期化しようとしました。メンバ初期化リストを介して静的メンバ変数を初期化できますか?
静的変数のようなエラーがたとえばコンストラクタ
経由で初期化することはできません。しかし、私は、私のクラスsample
はタイプint
の静的メンバ変数y
を持っていました。私はこれをすることができませんでした:
sample(int a):y(a){}
なぜそうですか?
静的メンバー変数は、クラスの単一インスタンスに属しません。したがって、コンストラクタ(インスタンスを初期化する関数)が実行されると、スタティックメンバはすでに初期化されています。再度初期化することはできません。
ただし、コンストラクタの体内でそれに割り当てることができます。
sample(int a) {y = a;}
ことはめったに役立ちませんけれども。
この場合も、コンストラクタが実行されるたびに1つのインスタンスが構築され、静的メンバーはすべてのインスタンスに存在することに注意してください。
静的メンバーはインスタンス単位ではなくクラス単位であるため、静的メンバーはプログラムの有効期間内に一度だけ作成されます。コンストラクタは、クラスのインスタンスを作成するたびに呼び出されます。
やりたいことに好かれるの.ccファイルの内部の静的メンバを初期化している
何かのように:。
// Foo.h
class Bar {
public :
Bar(int) {
}
};
class Foo {
public:
static Bar MrStatic;
};
// Foo.cc
Bar Foo::MrStatic(10);
申し訳ありませんが、ステートメントの末尾にセミコロンはありません。 – Deepika
基本を学ぶための本を読んでいるかもしれませんか? https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – Galik
@Deepikaあなたがあなたの質問に間違いを犯した場合、それを修正するために[編集]することができます。 –