gdc/03


gdc

3. インスタンス

リバエンしなくてもいいから一気に逝くぜ!

インスタンス生成

gcj/03の焼き直し。

a.d

public class Test
{
	public this() { printf("Test\n"); }
}

int main(char[][] args)
{
	Test a = new Test;
	return 0;
}

未定義参照

$ g++ dmain.cpp object.d invariant.d a.d
a.d:(.text+0xe): undefined reference to `__d_newclass'
collect2: ld returned 1 exit status

gc.d

とりあえずGCは無視して超手抜き実装。

extern (C) void* malloc(int size);
extern (C) void* memcpy(void* dest, void* src, int n);

extern (C) Object _d_newclass(ClassInfo ci)
{
	byte* p = cast(byte*)malloc(ci.init.length);
	memcpy(p, cast(byte*)ci.init, ci.init.length);
	return cast(Object)p;
}

動作結果

$ g++ dmain.cpp object.d invariant.d gc.d a.d
$ ./a
Test

インスタンスメソッド

gcj/04の焼き直し。

a.d

public class Test
{
	public void print() { printf("Test\n"); }
}

int main(char[][] args)
{
	Test a = new Test;
	a.print();
	return 0;
}

動作結果

すんなり動作

$ g++ dmain.cpp object.d invariant.d gc.d a.d
$ ./a
Test

インスタンスメンバ

gcj/05の焼き直し。

a.d

public class A
{
	private int num1, num2;

	public this(int a, int b)
	{
		num1 = a;
		num2 = b;
	}

	public int add() { return num1 + num2; }
	public int sub() { return num1 - num2; }
	public int mul() { return num1 * num2; }
	public int div() { return num1 / num2; }
}

int main(char[][] args)
{
	A a = new A(8, 2);
	printf("8, 2\n");
	printf("add: %d\n", a.add());
	printf("sub: %d\n", a.sub());
	printf("mul: %d\n", a.mul());
	printf("div: %d\n", a.div());
	return 0;
}

動作結果

すんなり動作

$ g++ dmain.cpp object.d invariant.d gc.d a.d
$ ./a
8, 2
add: 10
sub: 6
mul: 16
div: 4

Monaでの実行例

03.png

ソース: file03.zip

MENU

now: 2

リンク


最新の20件
2017-09-29 2017-04-25 2017-01-10 2016-12-11 2016-12-09 2016-10-04 2016-08-14 2016-06-05 2016-05-29 2016-04-15 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 2438, today: 1, yesterday: 0

添付ファイル: file03.zip 535件 [詳細] file03.png 419件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:00 (3681d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.052 sec.