第12回 複数のデータをまとめる枠組みの構造体
はじめに
前回は、配列とポインタの関係について学びました。
配列を使用すると、同じ型のデータをまとめて管理できます。
例えば、
int score[5];
のように、複数の整数を一つの名前で管理できます。
しかし、現実のデータは同じ種類の情報だけで構成されているとは限りません。
例えば、学生の情報を管理する場合を考えてみましょう。
学生には、
- 名前
- 年齢
- 点数
など、異なる種類のデータが必要になります。
名前は文字列、年齢は整数、点数も整数です。
このような異なる型のデータをまとめて管理するために使用するのが構造体です。
今回の到達目標
- 構造体とは何かを説明できる。
- 構造体を定義できる。
- 構造体の変数を作成できる。
- メンバへアクセスできる。
- 構造体と配列を組み合わせて使用できる。
構造体とは
構造体とは、複数の異なる型のデータをまとめて管理するための仕組みです。
例えば、学生の情報を管理する場合、
学生
名前
年齢
点数
というように、複数の情報を一つのまとまりとして扱いたいことがあります。
構造体を使用すると、これらの情報を一つのデータとして管理できます。
構造体の定義
構造体は、structを使用して定義します。
基本的な書き方は次の通りです。
struct 構造体名
{
データ型 メンバ名;
};
例えば、学生情報を管理する構造体を作成します。
struct Student
{
std::string name;
int age;
int score;
};
この場合、
nameagescore
という3つのデータを持ったStudentという新しい型を作成しています。
構造体の中にあるデータをメンバと呼びます。
構造体の変数を作成する
構造体を定義しただけでは、まだデータを保存する場所はありません。
構造体を使用するには、変数を作成します。
Student student;
これで、
student
┌────────┐
│ name │
├────────┤
│ age │
├────────┤
│ score │
└────────┘
というデータのまとまりが作られます。
メンバへアクセスする
構造体の中にあるデータを使用するには、.(ドット演算子)を使用します。
例:
student.name = "Taro";
student.age = 20;
student.score = 80;
このように、
構造体変数名.メンバ名
という形式でアクセスします。
構造体のデータを表示する
実際に構造体を使用してみましょう。
#include <iostream>
#include <string>
struct Student
{
std::string name;
int age;
int score;
};
int main()
{
Student student;
student.name = "Taro";
student.age = 20;
student.score = 80;
std::cout << student.name << std::endl;
std::cout << student.age << std::endl;
std::cout << student.score << std::endl;
}
実行結果
Taro
20
80
このように、複数の種類のデータを一つのまとまりとして扱えます。
構造体の初期化
構造体は作成時に値を設定することもできます。
Student student = {"Taro", 20, 80};
順番は、構造体で定義したメンバの順番になります。
この場合、
name → Taro
age → 20
score → 80
として保存されます。
構造体と配列
構造体は配列と組み合わせて使用できます。
例えば、複数の学生情報を管理する場合を考えます。
Student students[3];
これで3人分の学生情報を管理できます。
イメージとしては、
students
┌─────────┐
│ Student │
├─────────┤
│ Student │
├─────────┤
│ Student │
└─────────┘
となります。
構造体の配列を利用する
例えば、
students[0].name = "Taro";
students[0].score = 80;
students[1].name = "Hanako";
students[1].score = 90;
のようにアクセスできます。
配列の添字で何人目のデータかを指定し、その後.でメンバへアクセスします。
構造体を使うメリット
構造体を使用しない場合、
std::string name;
int age;
int score;
のように、それぞれの変数を別々に管理する必要があります。
しかし構造体を使用すると、
Student student;
という一つのまとまりとして管理できます。
これにより、
- 関連するデータをまとめられる
- データの管理がしやすくなる
- プログラムの構造が分かりやすくなる
というメリットがあります。
構造体とクラス
C++では、構造体とクラスには深い関係があります。
実はC++の構造体は、クラスと似た機能を持っています。
ただし、現在の段階では、
- 構造体 → データをまとめるもの
- クラス → データと処理をまとめるもの
という理解で十分です。
クラスについては、オブジェクト指向プログラミング編で詳しく学習します。
まとめ
今回は、複数のデータをまとめて管理するための構造体について学びました。
- 構造体は異なる型のデータをまとめる仕組みです。
structを使用して構造体を定義します。- 構造体の中にあるデータをメンバと呼びます。
.を使用してメンバへアクセスできます。- 構造体は配列と組み合わせて複数のデータを管理できます。
- C++の構造体は、クラスへつながる重要な概念です。
次回は、プログラムからファイルを読み書きするためのファイル操作について学びます。