クラス

クラスの宣言

classで行います。
関数と同じで、以下の四通りの記述方法があります。

class  {
class クラス名 {
class クラス名() {
class クラス名(引数, 引数) {

クラスは宣言したただけでは実体が作られないため、newを使って実体を作成する必要があります。
引数はそのままコンストラクタの引数となります。


コンストラクタ

クラス宣言の内部に書かれた文は、全てコンストラクタとして扱われます。
コンストラクタは、newを使って実体を作成時に実行されます。


デストラクタ

デストラクタは、固定名destructor()で定義します。


データメンバ

データメンバは、コンストラクタ内で利用された変数がそのままデータメンバとして利用されます。


メソッド

メソッドは、関数の宣言と同一です。(functionで定義する)
呼び出し方法は、クラスの実体.メソッドの形になります。(ドット演算子を使う)


クラス内クラス

クラスは内部にクラスを持つことが出来ます。(継承も可)
例:

class A {          # クラスAの宣言
class B {      # クラスBの宣言
    class C {  # クラスCの宣言
        function destructor(){     # デストラクタの宣言
        }
    }
}
}


クラスの実体化

newを使います。
実体化の手順としては、

  • クラスを実体化(new クラス名)
  • 内部のメソッドを実体化
  • コンストラクタを実行
  • 内部にクラスを持つならば、そのクラスを実体化
  • クラス内クラスのメソッドを実体化
  • クラス内クラスのコンストラクタを実行
  • 以降繰り返し
となります。
前述クラス内クラスの例に沿って説明すると、
例:
a = new A;              # クラス A B C とも実体化し、
                          それぞれのコンストラクタが呼び出される
b = new A.B;            # クラス B C が実体化され、
                          それぞれのコンストラクタが呼び出される


クラスの破棄

クラスを明示して破棄したい場合、deleteを使います。
(クラスの参照具合によっては、即時に破棄されるとは限りません。)


データメンバ/メソッドのアクセス権限

publicprivateを宣言に付与します。


クラスの継承

クラスは、宣言時にextends 元クラス名とすることで、継承することができます。
継承時には、コンストラクタ/デストラクタ共、自動的に元クラスの物が呼び出されます。
呼び出し順序は、
親クラスのコンストラクタ→親クラスメンバクラスのコンストラクタ→
              子クラスのコンストラクタ→子クラスメンバクラスのコンストラクタ

子クラスメンバクラスのデストラクタ→子クラスのデストラクタ→
              親クラスメンバクラスのコンストラクタ→親クラスのデストラクタ
になります。