-
Notifications
You must be signed in to change notification settings - Fork 7
Class
Silica edited this page Mar 16, 2012
·
4 revisions
#Class ##Definition classname { int i = 1; int j = 2; func() { return i + j; } }
##Instance classname instance;
instance.i == 1;
instance.j == 2;
instance.func() == 3;
##Destructor
if method named "destructor" exist
that execute automatically when instance deleted
class
{
int i = 2;
func(x)
{
i += x;
}
destructor()
{
print("i is " + i);
}
}
class c;
c.func(4);
result:
i is 6
##クラスの動的生成
global class;
class.i = 2;
class.func = (x){i += x;};
class.destructor = (){print("i is " + i);};
class c;
c.func(4);
これで上の例と全く同じ効果を持つ
##継承
そんないいものは無いが
動的生成や関数合成を駆使すればそれっぽいことは出来る
基底クラスをただコピーして、追加要素を加えている形
base
{
int i = 1;
func() print("method" + i);
}
derived = base;
derived.additionalmember = "default value";
derived.additionalmethod = (x){print(additionalmember + x);};
derived.func = (){print("over ride!" + additionalmember);};
derived instance;
instance.func(); // over ride!default value
拡張部分を別のクラスにしておいて合成する 多重継承の形に近い
base
{
int i = 1;
int j = 2;
func() print(i+j);
}
extend
{
int k = 3;
int l = 4;
func() print(i+j+k+l);
}
derived = base + extend;
derived c;
c.func(); // 10
合成部分に無名関数を利用する
derived = base + (){
int k = 3;
int l = 4;
func() print(i+j+k+l);
};
尚、クラスの定義は静的だが、その他の操作は動的であることに注意