classで配列を宣言したときの初期化にて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
C++勉強中

classで配列を宣言したときの初期化にて

#1

投稿記事 by C++勉強中 » 14年前

class Num{
public:
Num():
a( 0 )
{
}
public:
int a;
int b[ 100 ];
};

classでこのように配列で宣言した場合初期化はどのようにすればいいのでしょうか?
お願いします

アバター
迷彩吹雪
記事: 6
登録日時: 14年前
連絡を取る:

Re: classで配列を宣言したときの初期化にて

#2

投稿記事 by 迷彩吹雪 » 14年前

素直に

コード:

Num::Num() : a(0){
	for(int i=0; i<100; i++){
		b[i] = 0;	//任意の数字を代入
	}
}
とすれば良いのではないでしょうか。

それともint aと同じく初期化リストで初期化したいのでしょうか。
その場合は私にもわかりません。検索してみたところboostを使った方法などはあるようですが……。
しかしconst修飾子がついている定数の初期化なら別として、普通のメンバ変数を初期化するのならコンストラクタ内でも良いのではないかと思います(個人的意見)。

余談ですが、int aの宣言より先にコンストラクタでの初期化処理があるのでコンパイルエラーになるような気がします。気のせい?

めるぽん

Re: classで配列を宣言したときの初期化にて

#3

投稿記事 by めるぽん » 14年前

コード:

Num() : a(0), b() { }
とすれば、b も全て 0 で初期化されます(古いコンパイラの場合はこれで初期化されないこともあったようですが)。

この表記で 0 に初期化されるための条件にはいくつか複雑なルールがあるのですが、とりあえずは int 配列や double 配列はこの表記で 0 に初期化できるということだけ覚えればいいと思います。

アバター
GRAM
記事: 164
登録日時: 14年前
住所: 大阪

Re: classで配列を宣言したときの初期化にて

#4

投稿記事 by GRAM » 14年前

クラスという事はC++でしょうから
STLのstd::vector等のコンテナをつかえばよろしいのではないでしょうか?

例えばベクタならコンストラクタに
vector( 要素数, 初期化する値 )
とすればよいですし、要素ごとに違う値で初期化したければ
vector(iterator_begin、iterator_end)
という方法もあります。

どちらにしてもconstな配列を初期化できます

C++勉強中

Re: classで配列を宣言したときの初期化にて

#5

投稿記事 by C++勉強中 » 14年前

丁寧な解説ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る