page0081
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* オブジェクト指向
-(by [[K]], 2014.05.22)
** (0)
-(ここに書いていることは2014年度内には実現しません!)
-何年か先には、OSECPU-VMでもオブジェクト指向言語を作るこ...
~
-僕としてはC++を作りたいのではなくて、C++よりもよい「なに...
** (1)
-C++でvirtualなメンバ関数を含むクラスを作ると、内部では見...
--例:
class C {
int a, b;
virtual void setA(int _a) { a = _a; }
virtual void setB(int _b) { b = _b; }
};
sizeof (C) は { TypeInfo *info; int a, b; } から計算して...
TypeInfoにはsetAやsetBのポインタが格納されている。
この仕組みのおかげでこんなことができます。
class C を継承して class D を作り、setBだけオーバーロー...
setBのポインタが新しい関数を指しているので、正しく子クラ...
うまく呼び出せます。
-つまりC++でvirtualなメンバ関数を呼び出す場合は、オブジェ...
-infoの構造(何番目の関数ポインタがsetBを指しているのか)...
-このような仕組みになっているので、オブジェクトが一つでも...
~
-このinfoは「仮想関数テーブル」と呼ばれていて、vtableと表...
--http://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E9%96%A...
** (2)
-C++の方式では、以下のような問題があります。
--あるクラスがあって、そのクラスにもsetAとsetBというメン...
--同じメンバ関数があれば、たとえ継承関係がなくても、同じ...
---http://ja.wikipedia.org/wiki/%E3%83%80%E3%83%83%E3%82%...
--これができる言語もあります。
--上記のWikipediaのページでは、C++でもテンプレートを使う...
-僕の考える方式では、違った考え方をします。
-まず、関数のポインタをオブジェクトの中から取得することを...
C++方式: void func(C *c) { c->setA(13); }
提案手法: void func(C *c, Func *setA) { (*setA)(c, 13); ...
-提案手法を厳密に書くとややこしくなるので雑にしていますが...
-setAとsetBを使うのだとしたら、その両方のポインタを引数で...
--もちろん毎回必要なメンバ関数を引数に列挙しなければいけ...
-この方式だと、setAの代わりにsetBをあえて使わせる、みたい...
-このアイデアは、Cの<stdlib.h>のqsort()を思い出したときに...
--たとえばソートはいろいろな順序でやりたいはずで、それは...
* こめんと欄
#comment
終了行:
* オブジェクト指向
-(by [[K]], 2014.05.22)
** (0)
-(ここに書いていることは2014年度内には実現しません!)
-何年か先には、OSECPU-VMでもオブジェクト指向言語を作るこ...
~
-僕としてはC++を作りたいのではなくて、C++よりもよい「なに...
** (1)
-C++でvirtualなメンバ関数を含むクラスを作ると、内部では見...
--例:
class C {
int a, b;
virtual void setA(int _a) { a = _a; }
virtual void setB(int _b) { b = _b; }
};
sizeof (C) は { TypeInfo *info; int a, b; } から計算して...
TypeInfoにはsetAやsetBのポインタが格納されている。
この仕組みのおかげでこんなことができます。
class C を継承して class D を作り、setBだけオーバーロー...
setBのポインタが新しい関数を指しているので、正しく子クラ...
うまく呼び出せます。
-つまりC++でvirtualなメンバ関数を呼び出す場合は、オブジェ...
-infoの構造(何番目の関数ポインタがsetBを指しているのか)...
-このような仕組みになっているので、オブジェクトが一つでも...
~
-このinfoは「仮想関数テーブル」と呼ばれていて、vtableと表...
--http://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E9%96%A...
** (2)
-C++の方式では、以下のような問題があります。
--あるクラスがあって、そのクラスにもsetAとsetBというメン...
--同じメンバ関数があれば、たとえ継承関係がなくても、同じ...
---http://ja.wikipedia.org/wiki/%E3%83%80%E3%83%83%E3%82%...
--これができる言語もあります。
--上記のWikipediaのページでは、C++でもテンプレートを使う...
-僕の考える方式では、違った考え方をします。
-まず、関数のポインタをオブジェクトの中から取得することを...
C++方式: void func(C *c) { c->setA(13); }
提案手法: void func(C *c, Func *setA) { (*setA)(c, 13); ...
-提案手法を厳密に書くとややこしくなるので雑にしていますが...
-setAとsetBを使うのだとしたら、その両方のポインタを引数で...
--もちろん毎回必要なメンバ関数を引数に列挙しなければいけ...
-この方式だと、setAの代わりにsetBをあえて使わせる、みたい...
-このアイデアは、Cの<stdlib.h>のqsort()を思い出したときに...
--たとえばソートはいろいろな順序でやりたいはずで、それは...
* こめんと欄
#comment
ページ名: