#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。


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS