コンストラクタ

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

コンストラクタ(構築子、Constructor)は、オブジェクト指向プログラミング言語で新たなオブジェクトを生成する際に呼び出されて内容の初期化などを行なう関数、メソッドのことである。対義語はデストラクタ

オブジェクトの生成は、

  1. メモリ割当 (allocation)
  2. 初期化 (initialization)

の二段階を経て行われるが、コンストラクタを持つ言語ではアロケーションは言語機能に組み込まれ、初期化用のコードのみを記述するのが普通である。

クラスベース言語でのコンストラクタ[編集]

JavaC++PHPなど、クラスベースのオブジェクト指向言語では、コンストラクタはクラスのメンバとして定義される。

Java, C++ではコンストラクタを「クラス名と同一の名前を持ち戻り値指定のない関数(メソッド)」であるかのように記述することになっており、次のような自然な記法を行なえるようになっている。

class SomeClass{
  SomeClass(/*引数リスト*/){
    //初期化用のコード
  }
}
SomeClass obj = new SomeClass(//引数リスト);

なお、コンストラクタについて「クラス名と同一の名前を持つ関数(メソッド)」と説明している場合があるが、Java, C++では厳密にいえばこれは誤りであり、コンストラクタには名前は無い。 「クラス名と同一の名前を持つ関数(メソッド)」は、C++では定義する事はできないが、Javaでは(コンストラクタとは別に)定義可能である(もちろんお勧めはできない)。

コンストラクタに渡す引数により初期化のバリエーションが定義される。特にパターンとして名前をもつコンストラクタは以下である。

デフォルトコンストラクタ
引数なしで呼び出す事が出来るコンストラクタのことである。通常は引数のないコンストラクタであるが、C++ では全ての引数にデフォルト引数が指定されているコンストラクタも引数なしで呼び出す事が可能なためデフォルトコンストラクタと呼ばれる。
コピーコンストラクタ
同一クラスのオブジェクトから複製を作る。
コンストラクタチェーン
引数の異なる複数のコンストラクタをチェーンのように一つのコンストラクタへ結び付けること。単純なものから複雑なものへ流すことで初期化コードの重複を防ぐ。

JavaScriptのコンストラクタ[編集]

JavaScriptプロトタイプベースのオブジェクト指向言語であるため、クラスは存在せず、new付きで通常の関数を呼び出すことで、コンストラクタとして動作させることができる[1]。関数をコンストラクタとして呼び出すと、thisは新しく生成されるオブジェクトを指すようになり[1]、またプロトタイプも設定される[2]

脚注[編集]

[ヘルプ]