【C++】クラスの配列とポインタの使い方を解説

目次

はじめに

C++のクラス(class)は、オブジェクトの「設計図」です。この設計図から、複数のオブジェクト(実体)をまとめて管理したい場合や、オブジェクトを間接的に操作したい場合があります。

int型に配列 (int arr[10];) やポインタ (int* p;) があるように、自作したクラス型にも、オブジェクトの配列オブジェクトを指すポインタが存在します。これらの構文や考え方は、構造体(struct)の場合とほとんど同じです。

この記事では、クラスから作成した複数のオブジェクトを配列で管理する方法と、ポインタを使ってオブジェクトを操作する方法、それぞれの基本を解説します。


1. オブジェクトの配列

同じクラスから作られた複数のオブジェクトを、一つの変数でまとめて管理したい場合に使います。

サンプルコード

#include <iostream>
#include <string>

using namespace std;

class Product {
public:
    int productID;
    string productName;

    void display() {
        cout << "ID: " << productID << ", 商品名: " << productName << endl;
    }
};

int main() {
    // 1. クラスの配列を宣言 (3つのProductオブジェクトを格納)
    Product inventory[3];
    
    // 2. 配列の各要素(オブジェクト)のメンバに値を設定
    inventory[0].productID = 101;
    inventory[0].productName = "マウス";

    inventory[1].productID = 102;
    inventory[1].productName = "キーボード";
    
    inventory[2].productID = 201;
    inventory[2].productName = "モニター";
    
    // 3. ループで各オブジェクトのメンバ関数を呼び出す
    cout << "--- 在庫一覧 ---" << endl;
    for (int i = 0; i < 3; i++) {
        inventory[i].display();
    }
    
    return 0;
}

解説

  • Product inventory[3];: Productクラスのオブジェクトを3つ格納できる配列 inventory を宣言しています。
  • inventory[0].productID = 101;: 配列名[インデックス].メンバ名 という構文で、配列内の特定のオブジェクトのメンバにアクセスします。
  • inventory[i].display();: forループの中で、配列の各要素であるオブジェクトの display メンバ関数を呼び出しています。

2. オブジェクトへのポインタ

オブジェクトが格納されているメモリアドレスを保持し、そのアドレスを通じてオブジェクトを間接的に操作します。

サンプルコード

#include <iostream>
#include <string>

using namespace std;

class Product {
public:
    int productID;
    string productName;

    void display() {
        cout << "ID: " << productID << ", 商品名: " << productName << endl;
    }
};

int main() {
    // 1. オブジェクトを一つ作成
    Product item1;
    
    // 2. オブジェクトを指すポインタを宣言
    Product* p_item;
    
    // 3. ポインタに、オブジェクトのアドレス(&)を代入
    p_item = &item1;
    
    // 4. アロー演算子(->)で、ポインタ経由でメンバにアクセス
    p_item->productID = 301;
    p_item->productName = "Webカメラ";
    
    // 5. ポインタ経由でメンバ関数を呼び出す
    p_item->display();
    
    return 0;
}

解説

  • Product* p_item;: Productクラスのオブジェクトを指すことができるポインタ変数 p_item を宣言しています。
  • p_item = &item1;: item1 オブジェクトのメモリアドレスを、アドレス演算子 & で取得し、ポインタ p_item に代入しています。
  • p_item->productID = 301;: ポインタを通じてオブジェクトのメンバにアクセスするには、ドット(.)ではなく**アロー演算子(->)**を使います。
  • p_item->display();: メンバ関数の呼び出しも同様に、アロー演算子を使います。

まとめ

今回は、C++のクラス(オブジェクト)を、配列とポインタで扱う基本的な方法を解説しました。

  • オブジェクトの配列: 複数のオブジェクトをまとめて管理するのに便利。アクセスは 配列名[インデックス].メンバ
  • オブジェクトへのポインタ: オブジェクトを間接的に操作する。アクセスは ポインタ名->メンバ

これらの構文は、構造体(struct)の場合と全く同じです。オブジェクト指向プログラミングにおいても、これらの基本的なデータ構造の知識が同様に重要となります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次