Back to page

− Links

 Print 

Articles​/D言語入門講座​/第09章 - 構造体 :: D言語友の会

wiki:Articles/D言語入門講座/第09章 - 構造体


Table of contents
  • #01 - 構造体とは
    • 概要
    • 今回のミソ
  • #02 - 構造体の使い方
    • 今回は…
    • 今回のミソ
    • サンプルコード
    • 実行結果
    • まとめ
  • #summary - まとめ
    • 第09章のミソ
    • 宿題
    • コメント
  • 投票とコメント

#01 - 構造体とは anchor.png[4]

Page Top

概要 anchor.png[5]

構造体について説明します。 構造体というのは、感覚的にはデータをひとまとめにした新しい型を定義すること、に近いと思います。
たとえば、隆志君という人がいたとします。 身長は152cmで、体重は40kgだったとします。
さて、とあるプログラムで、隆志君の身体データが必要になりました。
この人のデータを表すにはどうしたらよいでしょうか?

char[] takashi_name = "隆志".dup;
real takashi_tall = 152;
real takashi_weight = 40;

このように表現しますか?
確かにこれでも出来ますが、隆志君以外にも、健史君のデータ、賢治君のデータ、洋平君のデータ…たくさんの人のデータが必要です、となった場合、この方法では変数の数がとても多くなってしまいますし、普通に非効率的です。
こういう場合に役に立つのが、構造体というものです。
構造体は、この例では名前、身長、体重をひとまとめにした新しい型を定義することができます。

Page Top

今回のミソ anchor.png[6]

  • 構造体を使うと、データをひとまとめにすることができる。
  • 構造体を定義するということは、新しい「型」を定義するということ。
Page Top

#02 - 構造体の使い方 anchor.png[7]

Page Top

今回は… anchor.png[8]

構造体を実際のコードで使うにはどうしたらよいのでしょうか?
構造体は、まず、関数のように、定義をしなければ使うことができません。
構造体は次のようにして定義します

struct Parson
{
    // Parson構造体の1つ目のメンバ変数「name」
    char[] name;
    // Parson構造体の2つ目のメンバ変数「tall」
    real tall;
    // Parson構造体の3つ目のメンバ変数「weight」
    real weight;
}

これを、関数の外に書くことで構造体を定義することができるようになります。
上記の構造体は、Parsonという名前の構造体で、構造体の保有するデータ(これをメンバ変数という場合もあります)は、名前(name)、身長(tall)、体重(wait)の3つです。 このParson構造体を使用するにはこのようにします。

// Parson型の変数takashiを定義
Parson takashi;

// 名前をセットします
takashi.name = "隆志".dup;
// 身長をセットします
takashi.tall = 142;
// 体重をセットします
takashi.weight = 40;

// 名前を使用します
writeln(takashi.name);
// 身長を使用します
writeln(takashi.tall);
// 体重を使用します
writeln(takashi.weight);

以下のサンプルコードでは、定義と使用方法を実際のプログラムで確認しますのサンプルコードでは、定義と使用方法を実際のプログラムで確認します。

Page Top

今回のミソ anchor.png[9]

  • 構造体の中のデータのことを、メンバ変数という。
  • 構造体を定義するには以下のようにする
    struct 構造体の名前
    {
        メンバ変数の定義
        メンバ変数の定義
        メンバ変数の定義
        :
        :
    }
  • 構造体の変数.メンバ変数名 でメンバ変数にアクセスできる。
Page Top

サンプルコード anchor.png[10]

filesample0902p.d[11]
Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
 
 
-
!
-
-
!
-
!
-
!
!
 
-
!
-
-
!
|
-
!
-
!
-
!
|
-
!
-
!
-
!
|
-
!
!
// writefln を使うため。
import std.stdio;
 
// Parson構造体の定義
struct Parson
{
    // Parson構造体の1つ目のメンバ変数「name」
    char[] name;
    // Parson構造体の2つ目のメンバ変数「tall」
    real tall;
    // Parson構造体の3つ目のメンバ変数「weight」
    real weight;
}
 
// main関数
int main(char[][] args)
{
    // Parson型の変数takashiを定義
    Parson takashi;
    
    // 名前をセットします
    takashi.name = "隆志".dup;
    // 身長をセットします
    takashi.tall = 142;
    // 体重をセットします
    takashi.weight = 40;
    
    // 名前を使用します
    writeln(takashi.name);
    // 身長を使用します
    writeln(takashi.tall);
    // 体重を使用します
    writeln(takashi.weight);
    
    // 正常終了
    return 0;
}
+  Tango用はこちら
filesample0902t.d[12]
Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
 
 
-
!
-
-
!
-
!
-
!
!
 
-
!
-
-
!
|
-
!
-
!
-
!
|
-
!
-
!
-
!
|
-
!
!
// writefln を使うため。
import tango.io.Stdout;
 
// Parson構造体の定義
struct Parson
{
    // Parson構造体の1つ目のメンバ変数「name」
    char[] name;
    // Parson構造体の2つ目のメンバ変数「tall」
    real tall;
    // Parson構造体の3つ目のメンバ変数「weight」
    real weight;
}
 
// main関数
int main(char[][] args)
{
    // Parson型の変数takashiを定義
    Parson takashi;
    
    // 名前をセットします
    takashi.name = "隆志".dup;
    // 身長をセットします
    takashi.tall = 142;
    // 体重をセットします
    takashi.weight = 40;
    
    // 名前を使用します
    Stdout(takashi.name).newline;
    // 身長を使用します
    Stdout(takashi.tall).newline;
    // 体重を使用します
    Stdout(takashi.weight).newline;
    
    // 正常終了
    return 0;
}
Page Top

実行結果 anchor.png[13]

1
2
3
隆志
142
40
Page Top

まとめ anchor.png[14]

というわけで、構造体の使い方は分ったでしょうか?
あとあと重要性が増してきますので、よくわからなくとも、このようなものがあるということだけは覚えておくといいと思います。
詳しくはオブジェクト指向にかかわってくることで、若干難しくなりますので今回は割愛。

Page Top

#summary - まとめ anchor.png[15]

Page Top

第09章のミソ anchor.png[16]

  • 構造体を使うと、データをひとまとめにすることができる。
  • 構造体を定義するということは、新しい「型」を定義するということ。
  • 構造体の中のデータのことを、メンバ変数という。
  • 構造体を定義するには以下のようにする
    struct 構造体の名前
    {
        メンバ変数の定義
        メンバ変数の定義
        メンバ変数の定義
        :
        :
    }
  • 構造体の変数.メンバ変数名 でメンバ変数にアクセスできる。
Page Top

宿題 anchor.png[17]

10人の国語と英語と数学の点数を集計して、各教科ごとの平均点、個人の平均点をそれぞれ出してください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
1人目
名前の入力 : 大原紀夫
国語の点数の入力 : 67点
英語の点数の入力 : 59点
数学の点数の入力 : 60点
2人目
名前の入力 : 木野誠
国語の平均点 : 59点
:
:
結果
大原紀夫平均点 : 63点
木野誠平均点 : 57点
:
:
国語平均点 : 64.6点
英語平均点 : 54.8点
数学平均点 : 75.2点
Page Top

コメント anchor.png[18]

今回は構造体について説明しました。
この辺はオブジェクト指向の第一歩になっていきますので、ぜひ使い方を確認しておくといいと思います。
あと、宿題に関して日本語の入力なんぞについて捕捉しますと、Windowsのコンソール画面での日本語の入力はALT+半角/全角で可能となります。Phobosでは日本語の入出力が正しく行われないので、英語オンリーのほうがいいかもしれません。
そんなわけで、宿題できたら、あるいは予想ついたら次にいきましょう~


Page Top

投票とコメント anchor.png[19]

Choices Vote
大変参考になった1  
参考になった0  
あまり参考にならなかった0  
まったく参考にならなかった0  

No comment. コメント​/Articles​/D言語入門講座​/第09章 - 構造体Edit[20]

Name:

Last-modified: 2009-04-20 (Mon) 23:10:44 (JST) (4664d) by SHOO