- 追加された行はこの色です。
- 削除された行はこの色です。
#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
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 とつけるとエラーになる。~
Derivedの定義中で Derived!(T) は使えないのでこれもエラー(こっちは正常っぽい。~
Derivedをさらに継承する場合は override はOK。