はじめに
C++やC言語でプログラミングをする際、例えば「商品」の情報を管理するために、productID
(商品ID)、productName
(商品名)、price
(価格)といった、関連性の高い複数の変数を個別に宣言するのは非効率です。
このような、互いに強く関連する複数の変数を、一つの大きな「型」としてまとめたい場合に使うのが、「構造体 (struct
)」です。struct
を使うことで、int
や char
のように、自分だけのオリジナルなデータ型を定義できます。
この記事では、構造体の基本的な定義方法と、定義した構造体を使ってデータをスマートに管理する方法を解説します。
構造体の使い方
1. 構造体を定義する
まず、struct
キーワードを使って、Product
(商品)という新しいデータ型の「設計図」を定義します。この設計図の中に、その型を構成する変数(メンバ)を記述します。
#include <iostream>
#include <string>
// 構造体の定義
struct Product {
int id; // 商品ID
std::string name; // 商品名
int price; // 価格
};
解説:
struct Product { ... };
:Product
という名前の新しい構造体型を定義しています。ブロックの最後のセミコロン;
を忘れないようにしましょう。int id;
など: この構造体が、どのようなデータ(メンバ)で構成されるかを、通常の変数宣言と同じように記述します。
2. 構造体を使って変数を宣言・使用する
作成した Product
型を使って、実際に変数を宣言し、そのメンバに値を代入・参照します。
int main() {
// 1. 作成した "Product" 型で変数を宣言
Product itemA;
Product itemB;
// 2. 各メンバに値を代入
// 変数名.メンバ名 の形式でアクセスする
itemA.id = 101;
itemA.name = "高機能マウス";
itemA.price = 4500;
itemB.id = 102;
itemB.name = "ワイヤレスキーボード";
itemB.price = 8200;
// 3. メンバの値を参照
std::cout << "商品Aの情報" << std::endl;
std::cout << "ID: " << itemA.id << std::endl;
std::cout << "名前: " << itemA.name << std::endl;
std::cout << "価格: " << itemA.price << "円" << std::endl;
return 0;
}
解説:
Product itemA;
:int
やdouble
と同じように、自作したProduct
型で変数を宣言できます。itemA.id = 101;
: 構造体の各メンバにアクセスするには、変数名.メンバ名
というように、ドット(.
)で繋ぎます。これをドット演算子(またはメンバアクセス演算子)と呼びます。
応用: 配列や他の構造体と組み合わせる
構造体は、配列と組み合わせることで、複数の商品データをスマートに管理できます。また、構造体のメンバとして、別の構造体を持つことも可能です。
struct Store {
std::string storeName;
Product featuredItem; // 構造体のメンバとして、別の構造体を持つ
};
int main() {
// 構造体の配列
Product inventory[3];
inventory[0] = {201, "Webカメラ", 6800}; // 初期化子リストでまとめて代入
std::cout << inventory[0].name << std::endl; // -> Webカメラ
// 構造体の中に構造体
Store tokyoStore;
tokyoStore.storeName = "東京本店";
tokyoStore.featuredItem = inventory[0];
std::cout << tokyoStore.storeName << "の目玉商品: "
<< tokyoStore.featuredItem.name << std::endl;
return 0;
}
まとめ
今回は、C++/C言語における構造体 (struct
) の基本的な使い方を解説しました。
struct
を使うと、関連する複数の変数をまとめた、独自のデータ型を定義できる。- 構造体の各要素をメンバと呼ぶ。
- メンバへのアクセスは、ドット演算子
.
を使う。
構造体を使いこなすことは、データを整理し、プログラムを構造化するための第一歩です。複雑なデータを扱う際には、積極的に構造体を活用して、分かりやすくメンテナンス性の高いコードを目指しましょう。