はじめに
プログラミングで、「学生」の情報を管理したい場合、「学生番号(int
型)」、「氏名(string
型)」、「平均点(double
型)」のように、複数の異なるデータが関連し合っています。これらの変数をバラバラに管理するのは非効率です。
C++の「構造体 (struct
)」を使えば、これらの関連するデータを一つの「学生」というオリジナルの型として、ひとまとめにできます。
この記事では、構造体の基本的な使い方を、①定義 → ②変数宣言 → ③メンバへのアクセス → ④初期化・代入 というステップで、初心者にも分かりやすく解説します。
1. 構造体(型)の定義
まず、struct
キーワードを使って、どのようなデータで構成されるのか、型の「設計図」を定義します。構造体を構成する各変数を「メンバ」と呼びます。
// 「学生」構造体の定義
struct Student {
int id; // 学生番号 (メンバ)
std::string name; // 氏名 (メンバ)
double average; // 平均点 (メンバ)
};
解説: Student
という新しい型を定義しました。この型は、int
, std::string
, double
という3つのメンバで構成されます。定義の最後のセミコロン ;
を忘れないようにしましょう。
2. 構造体変数の宣言とメンバへのアクセス
定義した構造体(型)を使って、実際にデータを格納するための変数(実体)を宣言します。メンバにアクセスするには、ドット演算子 (.
) を使います。
サンプルコード
#include <iostream>
#include <string>
using namespace std;
// 「学生」構造体の定義
struct Student {
int id;
string name;
double average;
};
int main() {
// 構造体「型」から、構造体「変数」を宣言
Student student1;
// ドット(.)を使って、各メンバに値を代入
cout << "学生番号を入力してください: ";
cin >> student1.id;
cout << "氏名を入力してください: ";
cin >> student1.name;
cout << "平均点を入力してください: ";
cin >> student1.average;
// メンバの値を参照して表示
cout << "\n--- 入力された学生情報 ---" << endl;
cout << "学生番号: " << student1.id << endl;
cout << "氏名: " << student1.name << endl;
cout << "平均点: " << student1.average << endl;
return 0;
}
解説: student1.id
のように、構造体変数名.メンバ名
という構文で、特定のメンバに値を代入したり、値を読み取したりできます。
3. 構造体の初期化と代入
構造体変数は、宣言と同時に初期化したり、他の構造体変数の内容を丸ごとコピー(代入)したりすることもできます。
サンプルコード
#include <iostream>
#include <string>
using namespace std;
struct Student {
int id;
string name;
double average;
};
int main() {
// 1. 初期化子リストを使って、宣言と同時に初期化
Student studentA = {101, "佐藤", 85.5};
// 2. 別の変数を宣言
Student studentB;
// 3. studentA の内容を studentB に一括で代入(コピー)
studentB = studentA;
// コピーされた内容を確認
cout << "コピーされた学生Bの情報" << endl;
cout << "学生番号: " << studentB.id << endl; // -> 101
cout << "氏名: " << studentB.name << endl; // -> 佐藤
cout << "平均点: " << studentB.average << endl; // -> 85.5
return 0;
}
解説:
Student studentA = {101, "佐藤", 85.5};
: 波括弧{}
を使った初期化子リストで、宣言時に各メンバの初期値をまとめて設定できます。値は構造体で定義されたメンバの順序に対応します。studentB = studentA;
: 代入演算子=
を使うと、studentA
の全てのメンバの値が、studentB
の対応するメンバに一括でコピーされます(メンバワイズコピー)。
まとめ
今回は、C++の構造体 struct
の基本的な使い方を網羅的に解説しました。
struct
を使って、複数の異なる型の変数をまとめた独自のデータ型を定義できる。- メンバへのアクセスにはドット演算子 (
.
) を使う。 - 初期化子リスト (
{...}
) で、宣言と同時に値を設定できる。 - 同じ型の構造体変数同士は、
=
で一括代入できる。
構造体は、関連するデータを構造化して管理するための、C++プログラミングにおける最も基本的なツールの一つです。