PB 電子会議室
カテゴリ:ユーザオブジェクト
日付:2001年02月08日 12:45 発信者:MIYAHARA
題名:RE(7):PB6.5: 関数の引数に、値(VALUE)としてDW型を指定した場合に、オリジナルが変更されるのは?
ryochanさん、こんにちは。
最近私も同様のことで悩みました。
↓引用順を変更しています。
>参照渡しでオブジェクトを渡すとさらに
>▲→◇→→dw_1
>↑ ↑
>| dw_1のポインタ
>dw_1のポインタのポインタ
>
>と▲のデータをp_dwのポインタに渡せ
>ということになり、
>dw_1のアドレスを指していないので
>うまくいかないのでは?
>(試していませんが、アクセス例外が発生するのでは)
これについて私の方で試してみた所、
問題なく動作しました。
この件についてアシストに質問をした所、
『結局オブジェクトを引数として渡す場合は、
値渡しも参照渡しも動作的には同じだと考えてよいです。』
とのことでした。
また
『関数やイベントの引数にオブジェクトを値渡しすると、「オブジェクト
のプロパティや実体が渡されるのではなく、オブジェクトデータへの参照
が渡される」という理解は正しいです。』
とのことでしたので、オブジェクトを引数などに渡す時は
ポインタ(のようなもの?)で渡されていると考えて良いようです。
私も納得がいきます。
私の想像なのですが、通常オブジェクトを生成する場合
datawindow dw_1
dw_1 = create datawindow
のように記述すると思うのですが、
一行目で、p_dwポインタのメモリ領域(アドレス値を保持するため)◇を用意して、
二行目で、オブジェクトの実体である■のメモリ領域を用意し、
そのアドレスをp_dwにセットしているのだと思います。
>◇□□□□◇□□□■■■■■■■■■■■■■■■■(メモリ)
>↑????↑??→|← dw_1生成領域 → |
>| |??→|プロパティ|メソッド|・・・|
>dw_1 p_dw
>ポインタ ポインタ
>(どちらもアドレス情報)
とここでちょっと疑問に思ったのですが、
この図で、プログラマはポインタである◇を
ローカル、グローバルと任意に指定できるのですが、
オブジェクトの実体である■の部分はどうなのでしょうね?
グローバルなのでしょうか?
この辺はアセンブルとかを勉強すれば理解できるのかな?。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows98
DBMS Oracle SQL*Net 8
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS Oracle 8.0
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.