コンテンツにスキップ

構造体、共用体、列挙体

提供:ウィキバーシティ

ここでは、C++プログラムにおけるデータ構造の基本である構造体, 共用体, および列挙体について解説します。

概要

[編集]

構造体 (struct)共用体 (union)、および列挙体 (enum)は、C++で複数のデータを一つのまとまりとして扱うための仕組みです。これらは、データの整理や管理を効率的に行うために使用されます。

構造体

[編集]

構造体は、異なる型のデータを一つのグループとしてまとめることができるデータ構造です。構造体を使うと、関連する複数のデータを一つの単位として扱うことができます。

[編集]

次に、構造体を使用して人のデータをまとめる例を示します。

// 構造体の例
#include<iostream>
#include<string>

struct Person {
    std::string name;
    int age;
    double height;
};

auto main() -> int {
    Person person{"John Doe", 30, 175.5};
    
    std::cout << "Name: " << person.name << std::endl;
    std::cout << "Age: " << person.age << std::endl;
    std::cout << "Height: " << person.height << " cm" << std::endl;

    return 0;
}

このプログラムを実行すると、personという構造体にまとめられたデータを使って、名前、年齢、身長が出力されます。

共用体

[編集]

共用体は、異なるデータ型のメンバが同じメモリ領域を共有するデータ構造です。これにより、メモリを節約することができますが、一度に一つのメンバしか保持できないという制約があります。

[編集]

次に、共用体を使用した例を示します。

// 共用体の例
#include<iostream>

union Data {
    int i;
    float f;
    char c;
};

auto main() -> int {
    Data data;
    
    data.i = 42;
    std::cout << "Integer: " << data.i << std::endl;
    
    data.f = 3.14f;
    std::cout << "Float: " << data.f << std::endl;
    
    data.c = 'A';
    std::cout << "Char: " << data.c << std::endl;

    return 0;
}

このプログラムでは、dataという共用体に異なる型のデータを格納し、その内容を順に出力します。ただし、共用体は最後に代入されたデータのみを正しく保持します。

列挙体

[編集]

列挙体は、関連する定数の集まりを定義するためのデータ型です。列挙体を使うと、コードの可読性を高め、特定の値のみを使用することを保証できます。

[編集]

次に、列挙体を使用した例を示します。

// 列挙体の例
#include<iostream>

enum class Color {
    Red,
    Green,
    Blue
};

auto main() -> int {
    Color color{Color::Green};
    
    if (color == Color::Green) {
        std::cout << "The color is Green." << std::endl;
    } else {
        std::cout << "The color is not Green." << std::endl;
    }

    return 0;
}

このプログラムでは、Colorという列挙体を定義し、その値を使って条件分岐を行います。列挙体は、整数値に対応する一連の識別子を持つことができます。

まとめ

[編集]

構造体、共用体、列挙体は、データを整理して効率的に管理するための重要な機能です。構造体は異なる型のデータをまとめるのに適しており、共用体はメモリ効率を考慮して使うべきです。列挙体は、コードの可読性と安全性を高めるために利用されます。