オブジェクトの配列
配列の初期化
オブジェクトも一つの変数であることは、なんとなくわかってきたと思います
何度も説明するように、オブジェクトと構造体型変数は同じようなものです
ということは、当然オブジェクトの配列を生成することも可能です
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つで、冗長になるのが嫌であればこのように記述することができます
オブジェクトの配列は、構造体の配列と大きな違いはありません
多次元配列のときの初期化方法も、通常の多次元配列の順番と同じです