クラスの新機能のバグ

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: クラスの新機能のバグ

by 高信期 » 2006年9月06日(水) 23:34

なるほど。了解しました。
ただ、

コード: 全て選択

C[0] = 10
というのはいかにも気持ち悪いので、間接参照演算子が欲しいところです。
ByValあたりがいいような。

by イグトランス » 2006年9月06日(水) 10:43

コード: 全て選択

Dim C As *CTest 
C = New CTest 
C = 10 
Delete C
これはCというポインタ変数に10という数値を代入されていると解釈されます。
だからOperator =が呼ばれないのです。
C[0] = 10とすればOperator =が呼ばれ,正常に動くはずです。

#間接参照演算子(*)があったほうが良いのかもしれません。

クラスの新機能のバグ

by 高信期 » 2006年9月06日(水) 02:19

AB5CP2のその他の変更点において、
>自信のクラスと同一のクラス型オブジェクトに対するプライベート メンバ/メソッドへのアクセスを許可するように改良。
とあるわけですが、自身と同一のクラスの引数があるメソッドで、Private, Protectedなメンバに触ろうとしても
コンパイル時に「Privateメンバ~」というエラーが出てしまいます。

また、Newで生成されたクラスにおいて、演算子オーバーロードを実行するとアクセス違反が起こります。

32bit WinXpHome IE6という環境で確認しました。
お忙しいとは思いますが、修正のほどよろしくお願いいたします。

コード: 全て選択

Class CTest
Private
  Num As Long
Public
  Sub Assign(ByRef Source As CTest)
    Num = Source.Num
  End Sub

  Function getNum() As Long
    getNum = Num
  End Function

  Sub setNum(Value As Long)
    Num = Value
  End Sub

  Sub Operator = (Value As Long)
    setNum(Value)
  End Sub

End Class

#prompt
'Privateメンバにアクセスする
Dim A As CTest, B As CTest
A = 10
B.Assign(A)
Print B.getNum()

'動的なクラスの演算子オーバーロードを実行する
'Dim C As *CTest
'C = New CTest
'C = 10
'Delete C

ページトップ