++C++; // 未確認飛行 C

Google
Web ufcpp.net

構造体

目次

キーワード

概要

C# では、複数の異なるデータ型の変数を1まとめにして管理するため、構造体と呼ばれるものを定義して使うことが出来ます。

構造体とは

今まで intdouble などの組込み型だけを使ってきましたが、 組込み型だけでは複雑なデータを扱うことはできません。 例えば、名簿を管理するプログラムを作りたいとします。 説明を簡単にするために、名前と年齢と住所のみを考えましょう。 この、名前と年齢と住所を一まとめにして管理できるような型があれば便利だとは思いませんか? そういうときに使うのが構造体(structure type)です。

構造体は以下のようにして定義します。

struct 構造体名
{
  構造体のメンバー
}

構造体のメンバーのところには、変数の宣言や関数の宣言が入ります。 この構造体中の変数をメンバ変数(member variable)またはフィールド(field: 作業領域)、関数のことをメンバ関数(member function)またはメソッド(method:手法、規則)といいます。

例えば、先ほどの例の名前と年齢と住所を一まとめにした構造体を定義したければ、以下のように書きます。 構造体の名前は Person にでもしておきましょう。

struct Person
{
  public string name;    // 名前
  public uint   age;     // 年齢
  public string address; // 住所
}

public というキーワードについては 「実装の隠蔽」 で説明します。

この構造体を利用するときには以下のようにします。

Person p = new Person(); // string とか配列と同じような感じで宣言&初期化

// 「 . 」 を使って各メンバーにアクセスする
// 構造体変数名.メンバ名
p.name    = "ちゆ";
p.age     = 12;
p.address = "http://www.tiyu.to";

サンプル

using System;

/// <summary>
/// 2次元の点をあらわす構造体
/// </summary>
struct Point
{
  public double x; // x 座標
  public double y; // y 座標

  public override string ToString()
  {
    return "(" + x + ", " + y + ")";
  }
}

class StructSample
{
  public static void Main()
  {
    Point p1 = new Point();
    Point p2 = new Point();

    p1.x = 100;
    p1.y = 0;

    p2.x = 400;
    p2.y = 400;

    Console.Write("{0} と {1} の間の距離は {2}", p1, p2, Distance(p1, p2));
  }

  /// <summary>
  /// 2点間の距離を求める
  /// </summary>
  static double Distance(Point p1, Point p2)
  {
    double dx = p1.x - p2.x;
    double dy = p1.y - p2.y;
    return Math.Sqrt(dx*dx + dy*dy);
  }
}
(100, 0) と (400, 400) の間の距離は 500

演習問題

問題 1

サンプル中の Point 構造体を使って、三角形を表す構造体 Triangle を作成せよ。 (3つの頂点を a, b, c 等のメンバ変数として持つ。)

また、作成した構造体に、三角形の面積を求めるメンバ関数 GetAreaを追加せよ。

/// <summary>
/// 三角形の面積を求める。
/// </summary>
/// <returns>面積</returns>
public double GetArea()

解答

Transtation into English

[お問い合わせ](q)