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++で「静的でないメンバー参照は特定のオブジェクトを基準とする相対参照である必要があります」エラーが出た時の対処

  <目次> (1) C++で「静的でないメンバー参照は特定のオブジェクトを基準とする相対参照である必要があります」エラーが出た時の対処  (1-1) エラーメッセージ  (1-2) 原因 …

C++のfork関数の構文や使い方について

  <目次> (1) C++のfork関数の構文や使い方について  (1-1) fork()関数とは?概要や目的  (1-2) fork()関数の構文  (1-3) fork()関数のサンプ …

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

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

C++のunsigned char型とは?概要やsigned charとの違いもご紹介

<目次> (1) C++のunsigned char型とは?概要やsigned charとの違いもご紹介  (1-1) 概要  (1-2) サンプルプログラム①:疎通確認 (1) C++のunsign …

CORBA通信のPOA(Portable Object Adapter)とは?

  <目次> (1) CORBA通信のPOA(Portable Object Adapter)とは?  (1-1) 概要と特徴  (1-2) 一般的なPOAの処理構成  (1-3) POAの …

  • English (United States)
  • 日本語
Top