Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

C++

C++の構造体とは?の作り方や使い方について

投稿日:2021年9月4日 更新日:

 

<目次>

(1) C++の構造体とは?の作り方や使い方について
 (1-1) 構造体とは?
 (1-2) サンプルプログラム
 (1-3) 構造体の変数を定義する方法
 (1-4) 構造体のメンバの初期化方法

(1) C++の構造体とは?の作り方や使い方について

(1-1) 構造体とは?

開発者自身で定義したデータ型で、Javaで言う「クラス」と似た概念です。通常のC++配列と違い、異なるデータ型のデータや関数を「メンバ」として複数個定義する事が可能です。構造体は「struct」キーワードを用いて定義します。そして{ }の中身にメンバ(変数や関数)を定義していきます。
 
(図111)構造体のイメージ
 

(1-2) 構造体の定義方法

(構文)
struct 構造体名{
    メンバ1;
    メンバ2;
    メンバ3;
    .
    .
    メンバN;
} オブジェクト名;
 
構造体は「struct」キーワードを用いて定義しています。前述の通り、メンバには変数と関数を2種類定義する事ができます。
 
メンバについては、変数と関数のいずれも定義可能です。
 
・①変数の場合
通常のC++変数と同じです。加えて、異なるデータ型の変数を複数個メンバとして登録が可能です。
 
・②関数の場合
通常のC++関数と同じです。構造体では変数と一緒に関数も含める事ができます。
 
(サンプルプログラム)変数と関数を宣言
struct person {
    string name;
    int age;
    double height;
    double weight;

    double calcBMI()
    {
        double bmi;
        bmi = weight / pow((height / 100), 2);
        return bmi;
    }
};
(図112)
 

(1-3) 構造体の変数を定義する方法

次は定義した構造体を使い、その型の変数を定義する方法についてです。
 
(サンプル)
#include <iostream>
#include <string>
using namespace std;

int main()
{

    //##### 構造体の変数の定義法① #####

    //# 構造体の末尾にオブジェクト名(p1)を指定
    struct Person {
        int age;
    } p1;
    //# 年齢をセット
    p1.age = 18;  
    //# コンソール出力
    cout << "P1 Age:" << p1.age << endl;

    //##### 構造体の変数の定義法② #####

    //# 構造体の変数を定義 & 年齢をセット
    struct Person p2 = { 30 };
    //# コンソール出力
    cout << "P2 Age:" << p2.age << endl;
}
 
(図113)
 

(1-4) 構造体のメンバの初期化方法

・方法①:構造体定義の中で初期化

C++11以上では構造体定義の中で初期化可能です(それ以前のバージョンだとコンパイルエラーになる)。
 
(例)
//# 構造体の定義
struct person {
    //# 初期化方法①
    //# C++では構造体定義の中で初期化可能
    string name = "Rainbow";
    int age = 30;
};

・方法②:構造体の変数定義後に初期化

「[構造体変数名].[メンバ変数名] = XXX」で初期化が可能です。
 
(例)構造体変数p1を定義し、p1.name=XXX等で初期化
struct person p1;
//# 初期化方法②
p1.name = "Rainbow2";
p1.age = 40;
 

・方法③:構造体の変数定義時に初期化

「struct [構造体名] [構造体変数名] = {メンバ1値,メンバ2値,・・,メンバN値}」で初期化もできます。
 
(例)1つ目の引数が「name」にセットされ、2つ目の引数が「age」にセットされます。
struct person p1;
//# 初期化方法③
struct person p2 = { "Rainbow3",50 };
 
(図114)
 
上記の方法①~方法③の挙動を確認するためのサンプルプログラムをご紹介します。
 
(サンプルプログラム)
#include <iostream>
#include <string>
using namespace std;

int main()
{
    //# 構造体の定義
    struct person {

        //# 初期化方法①
        //# C++では構造体定義の中で初期化可能
        string name = "Rainbow";
        int age = 30;
    };

    struct person p1;
    cout << p1.name << "_" << p1.age << endl;

    //# 初期化方法②
    p1.name = "Rainbow2";
    p1.age = 40;
    cout << p1.name << "_" << p1.age << endl;

    //# 初期化方法③
    struct person p2 = { "Rainbow3",50 };
    cout << p2.name << "_" << p2.age << endl;
}
 

Adsense審査用広告コード


Adsense審査用広告コード


-C++

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

C++をLinuxでコンパイルする方法について

  <目次> (1) C++をLinuxでコンパイルする方法について  (1-1) STEP0:【事前準備】ターミナル機能の準備(ターミナル、Teraterm、Putty)  (1-2) S …

ポインタと参照の違いについてサンプルPGを使ってご紹介

  <目次> (1) ポインタと参照の違いについてサンプルPGを使ってご紹介  (1-1) ポインタと参照の概要  (1-2) 両者の違い①:宣言/初期化  (1-3) 両者の違い②:再代入 …

C++の動的メモリ割当と静的メモリ割当の違いについて

  <目次> (1) C++の動的メモリ割当と静的メモリ割当の違いについて  (1-1) 静的メモリ割当てとは?  (1-2) 動的メモリとは?  (1-3) 動的メモリの割当て  (1-4 …

C++のマルチスレッド処理のサンプルや概要について

  <目次> (1) C++のマルチスレッド処理のサンプルや概要について  (1-1) C++のマルチスレッドの概要  (1-2) 構文1:関数ポインタ式  (1-3) 構文1(例):関数ポ …

ValgrindのStill Reachableの意味や実際のサンプルをご紹介

  <目次> (1) ValgrindのStill Reachableの意味や実際のサンプルをご紹介  (1-1) Valgrindの「Still Reachable」はどんな状況?  (1 …

  • English (United States)
  • 日本語
Top