コンストラクタとデストラクタ

C++

コンストラクタは、クラス名と同じ名前のメソッドとして定義する。デストラクタは、クラス名の頭に ~ を付け加えた名前のメソッドとして定義する。コンストラクタもデストラクタも、返り値型は書かず返り値がない。voidでもない。デストラクタは引数を持てない。コンストラクタは引数を持てる。引数のないコンストラクタをデフォルトコンストラクタと言う。

Java

コンストラクタは、クラス名と同じ名前のメソッドとして定義する。

デストラクタはJavaには存在しない。finalize() というメソッドがファイナライザと呼ばれるが、これはいつ呼び出されるか制御できず、デストラクタとは言わない。

コンストラクタは、返り値型は書かず返り値がない。voidでもない。

Scala

クラス名の後にコンストラクタの引数(クラスパラメータ)を書いて、処理内容をクラス定義の中に直接書く。

クラスの中に複数のコンストラクタを定義したい場合は、そのうち1つを基本コンストラクタ(primary constructor)といい、上述のように定義して、それ以外のコンストラクタを補助コンストラクタ(auxiliary constructor)といい、this という名前のメソッドで定義する。 this というメソッドの実装の中で他のコンストラクタを呼び出さないといけない。

traitではコンストラクタのパラメータを持つことができず、また基本コンストラクタのみで、補助コンストラクタを定義できない。

Javaと同じく、デストラクタは存在しない。

Ruby

initialize というメソッドがインスタンス初期化のためにnewメソッドから呼び出されるので、初期化時のコードを書くには、initializeメソッドをオーバーライドする。クラスメソッドであるnewメソッドをオーバーライドすることは推奨されていない。

newメソッド呼び出し時の引数がそのままinitializeメソッドに渡される。

initialize というメソッドは特に指定をしなくても自動で private になる。

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。