目次
はじめに
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
)の場合と全く同じです。オブジェクト指向プログラミングにおいても、これらの基本的なデータ構造の知識が同様に重要となります。