C++:オブジェクトの配列とオブジェクトポインタ

CやC++において重要なポインタのオブジェクトポインタについてのメモ。

オブジェクトの配列とオブジェクトポインタについて

オブジェクトの配列

オブジェクトは変数なので、変数の配列を宣言する方法でオブジェクトの配列を宣言できる。ここではSampleクラスのオブジェクトの2次元配列を作成し、初期化する処理をメモ。

サンプルコード
#include <iostream>
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]
</dd>
<dt>結果</dt>
<dd>
[code]
1,2
3,4
5,6
7,8
9,10
11,12

オブジェクトポインタ

オブジェクトポインタからオブジェクトへのアクセスはアロー演算子 -> を使用する。ポインタをインクリメントすれば次のオブジェクトを指す。

サンプルコード
#include <iostream>
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]
</dd>
<dt>結果</dt>
<dd>
[code]
1 2
3 4
5 6

まとめ

変数もクラスも配列も全てオブジェクトなので、同じようにポインタが使用出来るということです。少しややこしく感じますがシンプルに考えるようにしましょう。

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから

Related Contents

Pickup Contents