ab.com コミュニティ
https://www.activebasic.com/forum/

クラスの新機能のバグ
https://www.activebasic.com/forum/viewtopic.php?t=1521
ページ 11

作成者:  高信期 [ 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

作成者:  イグトランス [ 2006年9月06日(水) 10:43 ]
記事の件名: 

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

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

作成者:  高信期 [ 2006年9月06日(水) 23:34 ]
記事の件名: 

なるほど。了解しました。
ただ、
コード:
C[0] = 10
というのはいかにも気持ち悪いので、間接参照演算子が欲しいところです。
ByValあたりがいいような。

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/