クラスベース言語でのコンストラクタ
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/07 07:40 UTC 版)
「コンストラクタ」の記事における「クラスベース言語でのコンストラクタ」の解説
C++、Java、C#、PHPなど、クラスベースのオブジェクト指向言語では、コンストラクタはクラスのメンバとして定義される。 C++、Java、C#のコンストラクタは、「クラス名と同一の名前を持ち、戻り値指定のない関数(メソッド)」であるかのような記法となっている。以下にJavaの例を示す。 class SomeClass { SomeClass(/*引数リスト*/) { // 初期化用のコード }}SomeClass obj = new SomeClass(/*引数リスト*/); なお、コンストラクタについて「クラス名と同一の名前を持つ関数(メソッド)」と説明している場合がある[要出典]が、C++やJavaでは厳密にいえばこれは誤りであり、コンストラクタには名前はない。C++では「クラス名と同一の名前を持つメンバー関数」を定義することはできない。一方、Javaでは「クラス名と同一の名前を持つメソッド」を、コンストラクタとは別に定義可能であるが、これは混乱を招くだけでなく、「クラス名を大文字で始め、メソッド名を小文字で始める」というJava公式の慣習に反することにもなるため、通例コーディング規約で禁止または非推奨とされている。 また、PHPでは__construct、Rubyではinitializeというように、特定の名前を持つメソッドを作ればそれがコンストラクタになる、というプログラミング言語も存在する。 コンストラクタに渡す引数により初期化のバリエーションが定義される。特にパターンとして名前をもつコンストラクタは以下である。 デフォルトコンストラクタ 引数なしで呼び出すことができるコンストラクタのことである。通常は引数のないコンストラクタであるが、C++ では全ての引数にデフォルト引数が指定されているコンストラクタも引数なしで呼び出すことが可能なためデフォルトコンストラクタと呼ばれる。 コピーコンストラクタ 同一クラスのオブジェクトを基に、同一内容のオブジェクトを作成するコンストラクタ。複製を作る。ムーブコンストラクタと異なり、コピー元のオブジェクトが書き換えられることはない。 ムーブコンストラクタ 同一クラスのオブジェクトを基に、同一内容のオブジェクトを作成するコンストラクタ。コンストラクタ内では、内部状態をムーブ元のオブジェクトから自身のオブジェクトに移動する。すなわち、ムーブ元のオブジェクトの内容は破壊される(ムーブコンストラクタ実行前と異なる状態となる)。C++11で正式に導入された。 変換コンストラクタ 別の型からの暗黙変換を提供するコンストラクタ。C++において、explicit指定されておらず、1つだけ引数を受け取るコンストラクタは変換コンストラクタ (converting constructor) になり、明示的なコンストラクタ呼び出しの記述を省略できる。2つ以上の引数を受け取り、2つ目以降にデフォルト引数が指定されているコンストラクタも対象になる。 コンストラクタチェーン 引数の異なる複数のコンストラクタをチェーンのように一つのコンストラクタへ結び付けること。単純なものから複雑なものへ流すことで初期化コードの重複を防ぐ。C++11では委譲コンストラクタが言語機能として実装された。
※この「クラスベース言語でのコンストラクタ」の解説は、「コンストラクタ」の解説の一部です。
「クラスベース言語でのコンストラクタ」を含む「コンストラクタ」の記事については、「コンストラクタ」の概要を参照ください。
- クラスベース言語でのコンストラクタのページへのリンク