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

FreeBASIC Abstract

目次→言語リファレンス→変数とデータ型→ユーザ定義型ABSTRACT←オリジナル・サイト

ABSTRACT


抽象メソッドを宣言します。

構文:
Type typename Extends base_typename
Declare Abstract Sub|Function|Property|Operator ...
End Type

記述:
Abstract は、Virtualの特別な形です。
違いは、抽象メソッドは、本体がなく、宣言だけです。
基本的に、これは、いろいろな派生タイプによって実装されることができるインターフェースの宣言を許します。

抽象メソッドを呼ぶために、抽象メソッドは派生データ型によって置き換えられ、実行されます。でなければ、プログラムは停止します。
その結果、抽象メソッドをすべて実装する型だけが、オブジェクトをつくることができます。
同じ理由から、構築子は、実装されていないメソッドを呼んではいけません。

Constructors は仮想になりえないので、Constructors は抽象になりえません。
さらに、破壊子本体(暗黙であれ明示であれ)は、基礎とフィールドの破壊子を呼ぶために必要なので、抽象の destructors もサポートされません。

抽象は、C++ (FreeBASIC と異なり、C++ では、純粋な virtuals が本体を持つことができます。しかし静的にだけアクセスできます) では、「純粋、仮想」と呼ばれます。

注: 多重レベル継承では、同じ名前のメソッド(同じ識別子で署名)は、各継承階層レベルで、Abstractか、Virtualか、normal (指定子なし) 、と宣言することができます。
指定子が混ざっている場合、通常は、継承階層のトップから底まで、abstract -> virtual -> normal の順です。
上書き方法のアクセス・コントロール(Public/Protected/Private)は、内部多形プロセスによってではなく、コンパイル時に最初の呼び出しのためにのみ考慮されます。
派生した静的方法は、基礎 virtual/abstract メソッドを上書きすることができません。しかしどんな基礎メソッド(virtual/abstract を含む)も、陰にすることはできます。

例:

Type Hello extends object
    Declare abstract Sub hi( )
End Type

Type HelloEnglish extends Hello
    Declare Sub hi( )
End Type

Type HelloFrench extends Hello
    Declare Sub hi( )
End Type

Type HelloGerman extends Hello
    Declare Sub hi( )
End Type


Sub HelloEnglish.hi( )
    Print "hello!"
    Sleep
End Sub

Sub HelloFrench.hi( )
    Print "Salut!"
    Sleep
End Sub

Sub HelloGerman.hi( )
    Print "Hallo!(Guten Tag!)"
    Sleep
End Sub


    Randomize( Timer( ) )

    Dim As Hello Ptr h

    For i As Integer = 0 To 9
        Select Case( Int( Rnd( ) * 3 ) + 1 )
        Case 1
            h = New HelloFrench
        Case 2
            h = New HelloGerman
        Case Else
            h = New HelloEnglish
        End Select

        h->hi( )
        Delete h
    Next


方言差:

QBからの違い:

参照:

ユーザ定義型 に戻る
ページ歴史:2019-06-26 12:50:09
日本語翻訳:WATANABE Makoto、原文著作者:DkLwikki

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

表示-非営利-継承