hiroshiです。

On Wed, 07 Oct 1998 07:58:45 -0700
Kazutoshi TAKATA <t...@jps.net> wrote:

> 高田@USAです。
> こんばんわ。

> On Wed, 07 Oct 1998 22:23:36 +0900
> hiroshi <h...@goukaku.com> wrote:
> > 自分ではクラスとは、structureだと思っています。C言語のstructureは変数く
> > らいしか基本的に扱えませんが、これに関数までひっくるめてstructureしたもの
> > がクラス。という風に考えてるようにしています。

> ちょっと修正。

> C++では、struct は、デフォルトのメンバ属性が publicのクラスです。

> また、使い方として、なんでもかんでもクラスに入れるのは変です。
> 関連する範囲を限定して、クラスの種類や継承関係を設計するのがC++の
> 味噌だと思います。

あ、そうですね。
structのデフォルト属性はpublicですね。
ですがクラスの場合はprivateですね。
すみません。


> > 共用化したい関数があるのなら、それはクラス化せず通常のCのように記述して
> > プロトタイプをexternすれば?という考えもあるのですが、「ならばそこ(クラ
> > ス化せずCで記述した共用化関数)からは自由にクラスのメンバ変数は使えない
> > な」と思い、「それなら一層のこと一番外で common comm としておき、使いたい
> > ときに a = comm.abc - b; などとするのかな?」と思うわけですが、これだとク
> > ラスの意味がまるで無いように思え、振り出しに戻ってしまうんです。

> ---
> int hoge_func(int a)
> {
>  【aを操作】
>  return a;
> }

> class hoge_class
> {
>  int a;
> public:
>  void hoge_mem_func(void);
> };

> hoge_class::hoge_mem_func()
> {
>  a = hoge_func(a); <= 扱えますよ?
> }
> ---
> うむ、問題ないっす。

いえ、この逆で共用化した関数の中でメンバ変数が使えないということです。
もちろん当然のことですが・・・
でもそうなると、そういう変数はメンバではなくて共用変数になりますね。


> 推測ですが、Cで書くころからグローバル変数を多様してませんか?

それはあるかもしれません。
4つ以上の引数はなるべく作らないようにしていました。
というのも高速化を考えて引数に関してはレジスタベースにしていました。
そうすると引数はスタックではなくて、レジスタで渡されるようになります。
(4つ以上だとスタックも併用されたと思います・・・)
アセンブラレベルで考えた場合、引数をいちいちpushしてから関数を呼び、
呼ばれた方は確か [bp+4] などのような感じでスタック領域を参照します。
計算などはメモリ領域で行うのとレジスタで行うのとではレジスタで行う方が高
速ですし、pushする処理も省略できることでなるべく引数は4つくらいまで
ということにしていました。
これにより結果的にグローバルメモリを多く使用していたかもしれません。


hiroshi