Skip to content

ABSTRACT


声明抽象方法

语法

vb
Type typename Extends base_typename

Declare Abstract Sub|Function|Property|Operator ...

End Type

说明

AbstractVirtual 的一种特殊形式。区别在于抽象方法没有方法体,只有声明。这实际上允许声明一个接口,可由各种派生类型来实现。

要调用抽象方法,必须已由派生数据类型重写并实现该方法,否则程序将中止。

因此,只有实现了所有抽象方法的类型才允许创建对象。同样的原因,构造函数不应调用未实现的方法。

构造函数 不能是抽象的,因为它们不能是虚拟的。此外,也不支持抽象析构函数,因为需要析构函数体(无论是隐式还是显式)来调用基类和字段的析构函数。

抽象方法在 C++ 中称为"纯虚函数"(与 FreeBASIC 不同,C++ 允许纯虚函数拥有方法体,但只能静态访问)。

注意:在多层继承中,同名方法(相同标识符和签名)可以在每个继承层次中分别声明为 AbstractVirtual 或普通方法(不带修饰符)。当混用修饰符时,通常的顺序是从上到下:abstract -> virtual -> normal。

重写方法的访问控制(Public/Protected/Private)不会被内部多态过程考虑,仅在编译时的初始调用中起作用。

派生的静态方法不能重写基类的虚拟/抽象方法,但可以遮蔽任何基类方法(包括虚拟/抽象方法)。

示例

start GeSHi

vb
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!"
End Sub

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

Sub HelloGerman.hi( )
    Print "Hallo!"
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

end GeSHi

方言差异

与 QB 的差异

  • FreeBASIC 新增特性

另请参阅

  • Virtual
  • Type
  • Extends
  • Extends Zstring
  • Extends Wstring
  • Object
  • Override

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系