オブジェクトの配列


配列の初期化

オブジェクトも一つの変数であることは、なんとなくわかってきたと思います
何度も説明するように、オブジェクトと構造体型変数は同じようなものです

ということは、当然オブジェクトの配列を生成することも可能です
GUIプログラムなどで、GUI部品をカプセル化したクラスのオブジェクトを配列にするなど
実用的プログラムでは、よく見かけるので扱いに慣れておきたいものです

基本的に、配列の生成方法やアクセス方法も構造体と同じです
配列名[インデックス].メンバ名 という形でアクセスすることができます
#include <iostream>
using namespace std;

class Kitty {
public:
	int nam;
} obj[10];

int main() {
	for(int i = 0 ; i < 10 ; i++) {
		obj[i].nam = i;
		cout << obj[i].nam << '\n';
	}
	return 0;
}
このプログラムでは、メンバ変数 nam に値を代入し出力しています
しかし、その動作は配列で実現されているオブジェクトです

配列でオブジェクトが宣言された時、配列の数だけコンストラクタが発生します
問題は、どうやってコンストラクタに引数を渡すかです
コンストラクタに引数を渡す場合は、通常の配列の初期化同様にリストを用います
#include <iostream>
using namespace std;

class Kitty {
public:
	Kitty(bool , char *);
};

Kitty::Kitty(bool bo , char *str) {
	if (bo) cout << str << '\n';
}

int main() {
	Kitty obj[3] = {
		Kitty(true , "Kitty on your lap") ,
		Kitty(false , "Card Captor Sakura") ,
		Kitty(true , "Di_Gi_Gharat")
	};
	return 0;
}
Kitty()コンストラクタは、第一引数のブーリアン、第二引数に文字列のポインタを受け取ります
第一引数がtrueの場合のみ、初期化時に渡された文字列を表示します

もし、コンストラクタの引数が1つならば
コンストラクタを省略して、引数に渡す値のみを記述することができます
#include <iostream>
using namespace std;

class Kitty {
public:
	Kitty(char *);
};

Kitty::Kitty(char *str) {
	cout << str << '\n';
}

int main() {
	Kitty obj[3] = {
		"Kitty on your lap" ,
		"Card Captor Sakura" ,
		"Di_Gi_Gharat"
	};
	return 0;
}
コンストラクタに渡す引数が1つで、冗長になるのが嫌であればこのように記述することができます

オブジェクトの配列は、構造体の配列と大きな違いはありません
多次元配列のときの初期化方法も、通常の多次元配列の順番と同じです



前のページへ戻る次のページへ