ページ 1 / 1
classで配列を宣言したときの初期化にて
Posted: 2011年3月15日(火) 21:38
by C++勉強中
class Num{
public:
Num():
a( 0 )
{
}
public:
int a;
int b[ 100 ];
};
classでこのように配列で宣言した場合初期化はどのようにすればいいのでしょうか?
お願いします
Re: classで配列を宣言したときの初期化にて
Posted: 2011年3月15日(火) 22:05
by 迷彩吹雪
素直に
コード:
Num::Num() : a(0){
for(int i=0; i<100; i++){
b[i] = 0; //任意の数字を代入
}
}
とすれば良いのではないでしょうか。
それともint aと同じく初期化リストで初期化したいのでしょうか。
その場合は私にもわかりません。検索してみたところboostを使った方法などはあるようですが……。
しかしconst修飾子がついている定数の初期化なら別として、普通のメンバ変数を初期化するのならコンストラクタ内でも良いのではないかと思います(個人的意見)。
余談ですが、int aの宣言より先にコンストラクタでの初期化処理があるのでコンパイルエラーになるような気がします。気のせい?
Re: classで配列を宣言したときの初期化にて
Posted: 2011年3月15日(火) 23:02
by めるぽん
コード:
Num() : a(0), b() { }
とすれば、b も全て 0 で初期化されます(古いコンパイラの場合はこれで初期化されないこともあったようですが)。
この表記で 0 に初期化されるための条件にはいくつか複雑なルールがあるのですが、とりあえずは int 配列や double 配列はこの表記で 0 に初期化できるということだけ覚えればいいと思います。
Re: classで配列を宣言したときの初期化にて
Posted: 2011年3月15日(火) 23:41
by GRAM
クラスという事はC++でしょうから
STLのstd::vector等のコンテナをつかえばよろしいのではないでしょうか?
例えばベクタならコンストラクタに
vector( 要素数, 初期化する値 )
とすればよいですし、要素ごとに違う値で初期化したければ
vector(iterator_begin、iterator_end)
という方法もあります。
どちらにしてもconstな配列を初期化できます
Re: classで配列を宣言したときの初期化にて
Posted: 2011年3月16日(水) 13:50
by C++勉強中
丁寧な解説ありがとうございます。