Java の様に一般的なOOPなクラス定義、生成構文をサポートするようになりました。

■ クラス定義

 クラス定義は以下の書式で行います。

    "class" <クラス名>
    "{"
        <メソッド定義>...
    "}"

 メソッド定義は通常の関数と同じ書式で行います。
クラスのメンバ変数の参照は this.<メンバ変数名> で行います。メンバ変数を宣言する必要はありません。

    class Human
    {
        function Human(name, age)   //  コンストラクタ
        {
            this.name = name;   //  引数をメンバ変数に代入
            this.age = age;
        }
        function print()    //  メンバ変数表示メソッド
        {
            cout << "name = '" << this.name << "', age = " << this.age << "\n";
        }
    }

 クラス名と同じ名称のメソッドはコンストラクタと呼ばれます。インスタンス生成時、自動的にコールされます(詳細は次節参照)。

■ インスタンス生成

 インスタンス(オブジェクト)の生成は以下の書式で行います。

    "new" <クラス名> [ "(" [ <引数列> ] ")" ]

 new句 は式のひとつの項なので、式の中に記述できます。通常は変数に代入します。

    var obj = new Humen("rei", 14);     //  名前:"rei", 年齢:14 でインスタンスを生成

 クラスにコンストラクタ(クラス名と同じ名前のメソッド)が定義されている場合、インスタンス生成時にコンストラクタがコールされます。 メンバ変数の初期化などを行うとよいでしょう。
インスタンス生成後は obj.name のようにメンバ変数をアクセスすることもできます。

■ 派生クラス定義

 派生クラスを定義する場合、以下のようにクラス定義で extends を使って基底クラスを指定します。

    "class" <クラス名> "extends" <基底クラス名>
    "{"
        <メソッド定義>...
    "}"

 基底クラスのコンストラクタをコールしたい場合は派生クラスのコンストラクタから明示的にコールするようにします。

■ << による文字列出力

console オブジェクトに対し 2項演算子<< で右の項の値をコンソールに出力することができるようになりました。
console << <exp>; は console.write(<exp>); と同じ動作を行います。
以下のサンプルは画面に "Hello, world" と出力します。

    console << "Hello, world.\n";

console << <exp>; は式を出力して console オブジェクト を値として返すので、 以下の用に << で続けて出力することができます。

    console << "Hello, " << "world.\n";

■ 出力専用の cout オブジェクト追加

"console" という単語は長いので "cout" でも文字列を出力可能にしました。 以下のサンプルは画面に "Hello, world" と出力します。

    cout << "Hello, world.\n";