ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 04:37

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 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


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2006年9月06日(水) 10:43 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
コード:
Dim C As *CTest 
C = New CTest 
C = 10 
Delete C
これはCというポインタ変数に10という数値を代入されていると解釈されます。
だからOperator =が呼ばれないのです。
C[0] = 10とすればOperator =が呼ばれ,正常に動くはずです。

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


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年9月06日(水) 23:34 
なるほど。了解しました。
ただ、
コード:
C[0] = 10
というのはいかにも気持ち悪いので、間接参照演算子が欲しいところです。
ByValあたりがいいような。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[11人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean