↓↓クリックして頂けると励みになります。
【20 | ポインター配列】 << 【ホーム】 >> 【22 | 構造体へのポインター】
C++の構造体(Structure)は、異なるデータ型の複数のメンバーを1つのデータ型としてグループ化するための仕組みです。
構造体は、関連するデータをひとまとめにして管理する際に便利です。
C++では、構造体はクラスと似た機能を持ちますが、通常はメンバーのアクセス制御やメソッドの定義などが行われません。
構造体の各メンバーは、別々のデータ型を持つことができます。
また、構造体のインスタンスを作成すると、そのメンバーにアクセスするためのドット演算子(.)を使用します。
構造体は、関連する情報をまとめて管理したり、異なるデータ型を組み合わせたりする場合に便利な機能です。
Visual StudioCodeで以下のcppファイルを作成して下さい。
新規作成 【Kouzoutai1.cpp】
#include <iostream> struct gakuseki { char name[13]; char nen[5]; char number[4]; char gakka[7]; char kumi[3]; }; struct gakuseki seito = {"山田太郎","2005","021","医学","10"}; int main() { std::cout << "名前:" << seito.name << std::endl; std::cout << "入学年度:" << seito.nen << std::endl; std::cout << "番号:" << seito.number << std::endl; std::cout << "学科:" << seito.gakka << std::endl; std::cout << "組:" << seito.kumi << std::endl; }
自分の名前(ローマ字)、入学年度、番号、学科(ローマ字)、組を格納する構造体を宣言して初期化したプログラムです。
構造体とは複数の型を集めた新しい型のことです。
構造体の宣言は以下のように行います。
struct 構造体名 {
型 メンバー1;
型 メンバー2;
・・・・
型 メンバーn;
}変数名, 変数名,・・・;
構造体であることは最初に structを書くことによって示します。
structの後ろの「構造体名」が新しい型の名前になります。
{}
の中にメンバーと呼ばれるいろいろな型のデータを格納します。
「}
」で構造体の宣言は終わり、その後に変数名を書けばその構造体型の変数が確保されます。
例 struct pen { char color; int futosa; }pen1,pen2;
例では構造体penが宣言されています。
構造体penは文字型変数と整数型変数をメンバーに持ち、メンバーを区別するためにそれぞれ、color、futosaというメンバー名をつけています。
最後に構造体penの変数としてpen1、pen2という名前の変数を確保しています。
構造体penの変数は次のように後で宣言することもできます。
struct pen { char color; int futosa; }; struct pen pen1, pen2;
構造体の演算には、メンバーへのアクセスと代入があります。
例 struct point { float x; float y; }p1, p2; p1.x = 1.0; p1.y = 2.0; p2 = p1;
構造体変数のメンバーにアクセスするには変数名の後ろにドットを置き、その後ろにメンバー名を書きます。
「p1.x
」は構造体変数p1のメンバーxという意味である。
従って例は構造体変数p1のメンバーxに1.0を代入し、次にメンバーyに2.0を代入しています。
さらに次の行で構造体変数p2にp1を一括代入しています。
これによりp2.x
は1.0、p2.y
は2.0になります。
構造体は常に初期化を変数確保と同時に行うことができます。
ただし対応する型に応じた形式で処理しなければならない点に注意してください。
例 struct pen { char color; int futosa; }; struct point pen1 = { 'b', 2 };
また次の例のように構造体の宣言、確保、初期化を同時に行うこともできます。
例 struct pen { char color[10]; int futosa; }pen1 = { "black", 2 };
サンプルプログラムを実行してみましょう。
~/Desktop/Programming/CPP $ cd "/Users/**/Desktop/Programming/CPP/" && g++ Kouzoutai1.cpp -o Kouzoutai1 && "/Users/**/Desktop/Programming/CPP/"Kouzoutai1 名前:山田太郎 入学年度:2005 番号:021 学科:医学 組:10
Visual Studio Codeで以下のcppファイルを作成して下さい。
新規作成 【Kouzoutai2.cpp】
#include <iostream> struct gakuseki { char name[30]; char nen[5]; char number[10]; char gakka[30]; char kumi[30]; }; struct gakuseki meibo(void) { struct gakuseki seito = {"山田 太郎", "2005", "010", "医学", "10"}; return seito; } int main() { struct gakuseki gakusei1; gakusei1 = meibo(); std::cout << "名前:" << gakusei1.name << std::endl; std::cout << "入学年度:" << gakusei1.nen << std::endl; std::cout << "番号:" << gakusei1.number << std::endl; std::cout << "学科:" << gakusei1.gakka << std::endl; std::cout << "組:" << gakusei1.kumi << std::endl; }
先ほどのサンプルプログラム「Kouzoutai1.cpp」を構造体型の関数で書き換えたプログラムです。
動作は前と同じです。
例 struct point { float x; float y; }; struct point init( void ) { struct point p; p.x = 0.0; p.y = 0.0; return p; } int main() { struct point p1, p2; p1 = init(); p2 = init(); }
この例は関数でいくつかの値を返すために1つの方法を示しています。
関数 initは引数なしで返り値の方は構造体point であるので、x座標とy座標の2つの値を返すことができます。
実際には関数の中で(x,y)座標を原点に設定しているだけです。
関数initは構造体point型の関数なので、それを直接構造体pointの変数p1,p2へと代入できます。
このように関数の型と構造体の一括代入を使えば、関数と複数の値をやりとりすることができます。
サンプルプログラムを実行してみましょう。
「Kouzoutai1.cpp」と同じ結果になります。
【20 | ポインター配列】 << 【ホーム】 >> 【22 | 構造体へのポインター】
↓↓クリックして頂けると励みになります。