CやC++において重要なポインタのオブジェクトポインタについてのメモ。
オブジェクトの配列とオブジェクトポインタについて
オブジェクトの配列
オブジェクトは変数なので、変数の配列を宣言する方法でオブジェクトの配列を宣言できる。ここではSampleクラスのオブジェクトの2次元配列を作成し、初期化する処理をメモ。
- サンプルコード
-
[code]
#include
using namespace std;class Sample {
int a, b;
public:
Sample(int x, int y) { a = x; b = y; }
int get_a() { return a; }
int get_b() { return b; }
};int main(int argc, const char * argv[])
{
// 2次元配列を宣言
Sample obj[3][2] = {
Sample(1,2), Sample(3,4),
Sample(5,6), Sample(7,8),
Sample(9,10), Sample(11,12)
};for (int i = 0; i<3; i++) { cout << obj[i][0].get_a() << ","; cout << obj[i][0].get_b() << "\n"; cout << obj[i][1].get_a() << ","; cout << obj[i][1].get_b() << "\n"; } return 0; } [/code]
- 結果
-
[code]
1,2
3,4
5,6
7,8
9,10
11,12
[/code]
オブジェクトポインタ
オブジェクトポインタからオブジェクトへのアクセスはアロー演算子 -> を使用する。ポインタをインクリメントすれば次のオブジェクトを指す。
- サンプルコード
-
[code]
#include
using namespace std;class Sample {
int a,b;
public:
Sample(int n, int m){ a = n; b = m; }
int get_a() { return a; }
int get_b() { return b; }
};int main(int argc, const char * argv[])
{
Sample obj[3] = {
Sample(1,2), Sample(3,4), Sample(5,6)
};Sample *p; // ポインタ作成
p = obj; // 配列の開始アドレスを代入for (int i = 0; i<3; i++) { cout << p->get_a() << " "; cout << p->get_b() << "\n"; p++; // 次のオブジェクトへ } return 0; } [/code]
- 結果
-
[code]
1 2
3 4
5 6
[/code]
まとめ
変数もクラスも配列も全てオブジェクトなので、同じようにポインタが使用出来るということです。少しややこしく感じますがシンプルに考えるようにしましょう。