「D言語」の版間の差分

(→‎契約: 単元『D言語/関数』で説明済みなので参照のこと。)
=== struct ===
=== class ===
[[D言語/オブジェクト指向]]を参照。
クラスは複数の変数を一まとめにし、それらを扱う関数も内包することで、簡潔で他のプログラムに依存しない独立した処理を可能とします。また、クラスは雛形(ひながた)であり、同じ性質を持ったデータ(オブジェクト)を多数作る事ができます。
 
==== 実体化 ====
クラスは雛形に過ぎないため、実際に変数として使うためには定義、宣言した後に'''実体化(インスタンス化)'''という作業が必要になります。Cというクラスのオブジェクトc1は
 
<syntaxhighlight lang="D">
C c1; // 宣言
c1 = new C();
</syntaxhighlight>
 
で実体化できます。これ以降c1をC型の変数として扱う事ができます。newが実体化する命令で、その対象はCというクラス、という事です。空白の()は後述するコンストラクタに何も指定しない事を意味します。
 
==== メンバ変数 ====
classの中に定義された変数の事を特にメンバ変数と言います。
オブジェクトの持つデータそのもので、これを扱いやすくするための仕組みが以下になります。
 
==== メンバ関数 ====
classの中に定義された関数を特にメンバ関数と言います。
メンバ変数に対する決まりきった処理を他のオブジェクトに依存すると、関わるオブジェクト数が増えるため複雑で読みにくく直しにくいコードになります。メンバ変数の事はメンバ関数に任せましょう。
 
==== コンストラクタ ====
this()という名前を持つ特殊なメンバ関数です。クラスをオブジェクトとして実体化する際に、this関数の中で定義された初期化処理を実行します。引数なしの場合はメンバ変数のデフォルト値を与えるのに使います。初期化するだけなので、返り値はありません。
 
<syntaxhighlight lang="D">
this()
{
i = 0;
str = "Default string";
}
</syntaxhighlight>
 
引数ありの場合も定義でき、何個でも定義できます(オーバーライド)
 
<syntaxhighlight lang="D">
this(int x)
{
i = x;
str = "int override";
}
this(string strin)
{
i = 0;
str = strin.idup;
}
</syntaxhighlight>
 
ここで定義した関数は、new実行時にC(''引数'')と表記する事で、引数に応じてthis(''引数'')関数を実行します。様々な初期状態を持った同じクラスのオブジェクトを作るのに便利です。
 
==== 演算子オーバーロード ====
四則演算(+-*/)など多くの演算記号を、クラスに対してまるごと作用させる演算を定義できます。
=== union ===
 
1,326

回編集