FreeBASIC マニュアルのトップに戻る

FreeBASIC ByrefVariables

目次→言語リファレンス→変数とデータ型→変数の宣言BYREF (variables)←オリジナル・サイト

BYREF (変数) 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

参照を宣言します

構文:
(Dim | Static) [Shared] Byref name1 As DataType = variable1 [, Byref name2 As DataType = variable2, ...]
or
(Dim | Static) [Shared] Byref As DataType name1 = variable1 [, name2 = variable2, ...]
or
[Static] Var [Shared] Byref name1 = variable1 [, Byref name2 = variable2, ...]

パラメタ:
name
参照名
variable
参照する変数名

記述:
変数に参照(名前で)を宣言します。

参照は、記憶域に位置するデータにアクセスする方法の実体です。
参照は、データそのものでなく、データの場所に関する情報だけです。
参照は、暗黙のうちに間接参照されるポインターとみなすことができます。
多くの場合、これをポインターに代わるものとして使うことができます。

変数が生成されるとき、参照は常に変数で初期化されなければなりません。
DataType は、変数の型と同じ型、または互換性のある型(たとえば、継承の場合はその基底の型の一つから)でなければなりません:

参照は、実行して、別の変数(互換性のある型)を参照するために再代入されることができます:
@refname = @othervariable

注意: 参照の配列と、UDT のための非静的参照項目は、まだサポートされていません。

例:
'' Comparison between:
''   - a copy ('ci') of a variable ('i')
''   - a reference ('ri') to a variable ('i')


Dim As Integer i = 12
Print @i, i

Dim As Integer ci = i  '' or Var ci = i
Print @ci, ci

Dim ByRef As Integer ri = i  '' or Var Byref ri = i
Print @ri, ri

Print

Print i, ci, ri
i = 34
Print i, ci, ri
ci = 56
Print i, ci, ri
ri = 78
Print i, ci, ri

Sleep


'' 参照を使うと、ポインターと比べて式を簡略化できます
'' (avoid to use operator '@' and especially '*')


Function fp () As ZString Ptr
    Static As ZString * 256 z
    Return @z
End Function

Dim As ZString Ptr pz = fp()
*pz = "FreeBASIC Zstring Ptr"
Print *pz
*pz &= " 1.3.0"
Print *pz


Print


Function fr () ByRef As ZString
    Static As ZString * 256 z
    Return z
End Function

Dim ByRef As ZString rz = fr()  '' or Var Byref rz = fr()
rz = "FreeBASIC Zstring Ref"
Print rz
rz &= " 1.4.0"
Print rz

Sleep


'' 参照を再代入することができます。
'' 1つの参照だけで扱える、UDT で、オブジェクトの連続した構築と破壊をコントロールする例。


Type UDT
  Declare Constructor ()
  Declare Destructor ()
  Dim As Integer I
End Type

Constructor UDT ()
  Static As Integer nb
  nb += 1
  This.I = nb
  Print "UDT.Constructor()"
End Constructor

Destructor UDT ()
  Print "UDT.Destructor()"
End Destructor


Var ByRef ru = *New UDT  '' or Dim Byref As UDT ru = *New UDT
Print ru.I
Delete @ru

Print

@ru = New UDT
Print ru.I
Delete @ru

Sleep


'' 多型(継承と仮想性を使う)は、次の3種類のエンティティいずれかを介して活性化できます:
''   - 派生型オブジェクトを参照する基本型ポインタ、
''   - 派生型オブジェクトを参照する間接参照基本型ポインタ、
''   - 派生型オブジェクトを参照する基本型参照
'
'' 下のコードの1行目を、TRUE でなく FALSE にすると、仮想性による多型は、アクティブ化されません。


#define virtuality TRUE

Type myBase Extends Object
  #if virtuality = TRUE
    Declare Virtual Sub hello()
  #else
    Declare Sub Hello()
  #endif
End Type

Sub myBase.hello()
  Print "myBase.hello()"
End Sub

Type myDerived Extends myBase
  Declare Sub hello()
End Type

Sub myDerived.hello()
  Print "myDerived.hello()"
End Sub


Dim As myBase mb
Dim As myBase Ptr pmb = @mb
Dim ByRef As myBase rmb = mb  '' or Var Byref rmb = mb
pmb->hello()    '' pmb は、基本型オブジェクトを参照する基本型のポインタです
(*pmb).hello()  '' *pmb は、基本型オブジェクトを参照する間接参照されたベース型のポインタです
rmb.hello()     '' rmb は、基本型オブジェクトを参照するベース型の参照です

Print

Dim As myDerived md
Dim As myBase Ptr pmd = @md
Dim ByRef As myBase rmd = md  '' 構文だけ。参照データ型は、オブジェクトの型と異ならなければならないから。
pmd->hello()    '' pmd は、派生型オブジェクトを参照する基本型のポインタです
(*pmd).hello()  '' *pmd は派生型オブジェクトを参照する間接参照されたベース型のポインタです
rmd.hello()     '' rmd は、派生型オブジェクトを参照するベース型の参照です

Sleep


バージョン:
方言差:
QBからの違い:
参照:
変数の宣言 に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2021-10-11 09:33:18
日本語翻訳:WATANABE Makoto、原文著作者:fxm

ホームページのトップに戻る

表示-非営利-継承