#contents * 構文解析・意味解析 構文は常に正しい必要あり。~ 意味解析はインスタンス化したときに行われる。 * インスタンス化 - 同じ型によるインスタンス化ごとに1つしかインスタンスは作られない -- 違うモジュールでインスタンス化されていても1つ * abstract class v0.127 abstract class Base(T) {} class Derived(T): public Base!(T) {} はダメらしい(インスタンス化したときに文句が言われる。~ Base中に abstractなメソッドがある分にはいいらしい。~ あんまりよくわかってない。~ 2005-07-06 v0.127のままだがコンパイル通った・・・あれ? * 子クラスをシグネチャに含むメソッドのoverride v0.127 class Base(T) { void method(Derived!(T) t) {printf("Base\n");} } class Derived(T) : public Base!(T) { void method(Derived t) {printf("Derived\n");} // error // override void method(Derived t) {printf("Derived\n");} /* error void method(Derived!(T) t) {} override void method(Derived t) {} override void method(Derived!(T) t) {} */ } void main() { Base!(int) base = new Base!(int)(); Derived!(int) derived = new Derived!(int)(); base.method(derived); derived.method(derived); base = derived; base.method(derived); } 挙動としてはオーバーライドしているのだが override とつけるとエラーになる。 挙動としてはオーバーライドしているのだが override とつけるとエラーになる。~ Derivedの定義中で Derived!(T) は使えないのでこれもエラー(こっちは正常っぽい。~ Derivedをさらに継承する場合は override はOK。