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";