タイトル : 構造体型の変数について 投稿日 : 2007/09/09(Sun) 16:43 投稿者 : 灘
プログラミングを独学趣味で始めて1ヶ月目の初心者です。 VB2005以外の知識はありません。パソコンについても詳しくありません。 本をよんでいてよく理解できない点がありましたので詳しい方教えてください。 クラスと構造体のことについてです。 Class Person Dim FirstName As string Dim LastName As string Function CompName() As String Retrun FirstName & LastName End Function End Class Structure PersonStruct Dim FirstName As string Dim LastName As string Function CompName() As String Retrun FirstName & LastName End Function End Structure という二つのクラスと構造体が比較のためにあります。 「VBでは構造体もクラスと同じようにメソッドを持ち、その違いは値型と参照型である」とありました。 クラスの場合は Dim pClsObj As New Person とすることでPersonクラス型の変数pClsObjを「スタック」に作成。 そして変数pClsObjには「ヒープ」に新しく作成されたインスタンスを「参照」するためのデータが格納される。 次に Dim pClsObj2 As Person と新しくインスタンスを「ヒープ」上に作成せずに、2個目のクラス型変数を宣言した場合には、pClsObjとpClsObj2は同じインスタンスを参照することになる。 よって値を変えたりすると互いに影響がある。(これがポインタということでしょうか・・) "さらに、ヒープ上にあるインスタンスには「スタティック」にあるCompNameメソッドとの関連付けがなされるようなデータも付加されている" ということなんだとおもいます(ちがっていたら指摘してください) 構造体での使われ方が納得いかないのです。 "構造体は「値型」である。値型の変数は「参照」を格納するのではなく「値」そのものを保持する」 のようなことが書いてありました。 構造体型の変数を利用する場合も Dim pStrucObj As (New) PersonStruct のように構造体PersonStrcut型の変数を宣言することでこの構造体のメンバ変数を利用するということだと思います。 「New」というキーワードはつけてもつけなくても同じであり「冗長」であるとありました。 そこで判らなくなりました。 クラスであればNewを宣言すれば「ヒープ上にインスタンス」が作成されて、そのインスタンスには関連するメソッドなどとの関連付けのデータも付加される。 ということだと思います。 しかし「構造体型の変数pStrucObjは値型なので「参照ポインタ」ではなく値そのものが格納される」ということならば・・・構造体PersonStruct型の変数であるpStrucObj にはいったい何が格納されているのですか?構造体の値とは何でしょうか・・。 推測ですがもし仮に構造体変数のpStrucObjに、この構造体のメンバ変数である「FirstName」や「LastName」の値そのものが格納されているのであれば、 この構造体のメンバ変数と関連するメソッドGompName()との関連付けはどうなっているのでしょうか・・・。 クラスならヒープ上にインスタンスとメソッドとの関連付けをするようなデータが付加されているように、スタックにある構造体型の変数にもそういう関連付けのデータが付加されるのでしょうか・・ 非常に長くなりあいまいな点が多すぎるのでわかりにくいかもしれないですが、詳しい方がいたら「意味を汲み取って」いただいて説明をお願いします。 |