procedureのメソッドで元クラス自体の情報を入れるには?

解決


いちろう  2006-11-01 23:29:30  No: 23708

はじめまして、継承クラスをつくりはじめたくらいの技量の者です。

TOrigBitmap=class(TBitmap)
public
procedure  EffectCopy(var  ToBitmap:  TBitmap);
  …  
end;

というクラスを自作しているところなんですが、
ToBitmapに任意のBitmapを入れると、OrigBitmapが保持している画像がエフェクトされて出てくるという処理をつけようとして悩んでいます。
自分がしたいことは、

procedure  TOrigBitmap.EffectCopy(var  ToBitmap:  TBitmap);
begin

  ToBitmap.Assign( <TOrigBitmapのデータ> );

    〜  で、ToBitmapをエフェクト処理  〜

end;

としたいのですが、TOrigBitmapの外部でならToBitmap.Assign(OrigBitmap);でOrigBitmapの情報を渡せますが、
TOrigBitmapの手続内でToBitmapにTOrigBitmapの情報を渡す方法がわかりません。

他のところでも聞いてみたのですが、こういうことができるのかできないかも教えてもらえなかったので、気になって質問しています。
あと、質問の意味が上手く伝わらなかったらごめんなさい。


いちろう  2006-11-01 23:30:47  No: 23709

>procedureのメソッド

○procedureのメソッド内での間違いです。
ごめんなさい。


うんと  2006-11-02 00:24:39  No: 23710

ToBitmap.Assign(self)

じゃないですか。

ちなみに ToBitmap に別の参照を代入しないなら引数に var をつける必要はありません。


いちろう  2006-11-02 00:51:03  No: 23711

うんとさん、さっそくのお答えありがとうございます。
実験してみたら、本当にうまくいきました。

>ちなみに ToBitmap に別の参照を代入しないなら引数に var をつける必要はありません。

これも実験してみたのですが、本当にそのとおりでした。

どうして、varをつけないでコピー渡ししたつもりなのに、代入した元のToBitmapまでEffectCopyの手続内で変化させられるんでしょうか?

TBitmapはクラスだから、ポインタであり、引数にしたら参照渡しになるから?って推測してみたんですが。
もしどちらも結果的に参照渡しになるのなら、varをつけてもつけなくても速度的には同じってことですね…


いちろう  2006-11-02 00:56:26  No: 23712

あ、解決入れるの忘れてました。
うんとさん、ありがとうございます。


うんと  2006-11-02 01:08:48  No: 23713

> TBitmapはクラスだから、ポインタであり、引数にしたら参照渡しになるから?って推測してみたんですが。

そうです。クラスのインスタンス変数は参照(ポインタ)ですから、コピーを
渡しても実質が変更されます。

> もしどちらも結果的に参照渡しになるのなら、varをつけてもつけなくても速度的には同じってことですね…

いや、var をつけなければならないときもあります。例えば、渡されたビットマップ
と同じサイズのビットマップを新たにつくって、呼び出しもとに戻したいとき、など
です。このときは、もちろん渡されたビットマップはメソッド内で Free します。


いちろう  2006-11-02 01:39:43  No: 23714

うんとさん、どうもありがとう!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加