2016-06-30 11 views
-1

メンバー初期化リストで静的メンバー変数を初期化しようとしました。メンバ初期化リストを介して静的メンバ変数を初期化できますか?

静的変数のようなエラーがたとえばコンストラクタ

経由で初期化することはできません。しかし、私は、私のクラスsampleはタイプintの静的メンバ変数yを持っていました。私はこれをすることができませんでした:

sample(int a):y(a){} 

なぜそうですか?

+0

申し訳ありませんが、ステートメントの末尾にセミコロンはありません。 – Deepika

+4

基本を学ぶための本を読んでいるかもしれませんか? https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – Galik

+0

@Deepikaあなたがあなたの質問に間違いを犯した場合、それを修正するために[編集]することができます。 –

答えて

3

静的メンバー変数は、クラスの単一インスタンスに属しません。したがって、コンストラクタ(インスタンスを初期化する関数)が実行されると、スタティックメンバはすでに初期化されています。再度初期化することはできません。

ただし、コンストラクタの体内でそれに割り当てることができます。

sample(int a) {y = a;} 

ことはめったに役立ちませんけれども。

この場合も、コンストラクタが実行されるたびに1つのインスタンスが構築され、静的メンバーはすべてのインスタンスに存在することに注意してください。

0

静的メンバーはインスタンス単位ではなくクラス単位であるため、静的メンバーはプログラムの有効期間内に一度だけ作成されます。コンストラクタは、クラスのインスタンスを作成するたびに呼び出されます。

やりたいことに好かれるの.ccファイルの内部の静的メンバを初期化している

何かのように:。

// Foo.h 

class Bar { 
    public : 
     Bar(int) { 
     } 

}; 

class Foo { 
    public: 
     static Bar MrStatic; 
}; 

// Foo.cc 

Bar Foo::MrStatic(10); 
関連する問題