这些是基本的开发语言语句,HB++对面向对象作了不少支持工作,在这方面,比VB.NET最新版的面向对象支持方面更加出色.这里将分段介绍HB++,供同行业朋友指正和帮助
3.2 语句
1. 顺序语句
a) 赋值语句
Let基本类型赋值语句
[Let] 变量名 | 类成员变量名 = 表达式
Set非基本类型赋值语句
Set 变量名 | 类成员变量名 = 表达式
Set 变量名 | 类成员变量名 = New 非基本类型名[(构造时的参数表)]
b) 调用函数
Call调用函数语句
[Call] 函数名 | 类成员函数名(参数表)
即使函数有返回值,使用Call语句后,返回值将自动丢失。如果返回的是类实例,HB++将自动释放类实例空间。
2. 条件语句
a)If语句
If语句标准格式:
If 逻辑表达式 Then
[Else If 逻辑表达式 Then]
[Else]
End If
b)Select语句
Select语句标准格式:
Select 算术表达式
Case 逻辑表达式
[Case Else]
End Select
注意:此处的逻辑表达式的第一个逻辑运算符不需要左边的算式。例如:
Dim a As Long
a=10
Select a+3
Case <2
Case >2 And a+3<10
Case >10 And a+3<100
CaseElse
End Select
3. 循环语句
a)For循环语句
标准格式:
For 循环变量 = 初始值 To 终止值 [Step 步长值]
Next 循环变量
循环变量只能是单独的变量,不能是类的成员属性或函数。步长值缺省值等于1。
Next语句的循环变量一定要与For语句中的循环变量相同。
Exit For语句将跳出循环
b)ForSet集合专用循环语句
ForSet 集合变量
NextSet
集合变量只能是集合类的实例变量。其初始值是集合的第一个元素。此循环将自动从第一个元素循环道集合的最后一个元素。循环体中直接使用集合变量操作元素内容。
Exit For语句将跳出循环
c)Do While...Loop当条件为真循环语句
Do While 逻辑表达式
Loop
条件先于循环,当外部进入循环时,条件不成立,循环将跳过。
Exit Do语句将跳出循环
d)Do Until...Loop当条件为真跳出循环语句
Do Until 逻辑表达式
Loop
条件先于循环,当外部进入循环时,条件成立,循环将跳过。
Exit Do语句将跳出循环
e)Do...Loop While后判断当条件为真循环语句
Do
Loop While 逻辑表达式
条件后于循环,当外部进入循环时,至少循环一遍,然后判断条件是否成立,如果成立,循环将跳出。
Exit Do语句将跳出循环
f)Do...Loop Until后判断当条件为真跳出循环语句
Do
Loop Until 逻辑表达式
条件后于循环,当外部进入循环时,至少循环一遍,然后判断条件是否成立,如果不成立,循环将跳出。
Exit Do语句将跳出循环
4. 定义语句
a)Function函数定义语句
标准格式:
[Virtual] [Public | Private]Function 函数名([[ByVal | ByRef] 参数名 As 类型名][,[ByVal | ByRef] [Optional] 参数名 As 类型名[= 常量表达式]]...) As 类型名
End Function
函数名:必选,必须是有效字母:26个大小写英文字母、10个数字、下划线、所有中文,第一个字母必须是英文字母或中文、下划线;
参数名:同变量名;
类型名:基本数据类型、非基本数据类型(对象类)、类模板类型;
[Virtual]:虚拟函数定义,仅仅只能在类的成员函数中定义;
[Public | Private]:可选,公有私有说明;
[ByVal | ByRef]:可选,参数按值或按地址传。缺省是按地址传ByRef;
[Optional]:可选,表示此参数可以写可以不写,即可选参数。可选参数可以对其给一个缺省值,方法是在其定义后跟一个等号和常量算式。
[= 常量表达式]:可选,当前面定义的参数是可选参数时,才能使用缺省值定义。常量表达式中不能使用变量。
End Funciton:结束函数定义
b)Class类自定义语句
标准格式:
Class 自定义的类型名 [From 已有的对象类型名]
End Class
自定义的类型名同变量名的字母组成,自定义类型名不能与已有类型名相同。此类型将是对象类。
[From 已有的对象类型名]:From继承语句,说明自定义类型是需要从已有的对象类型继承过来的。
类型定义必须放在模块定义的内部
c)Module模块定义语句
标准格式:
Module 模块名
End Module
模块内部将可以定义以下内容:
自定义对象类型、全局变量、全局函数、模块内局部变量、模块内局部函数。
模块内部不能定义窗口类,窗口类是独立与所有定义形式。
模块定义的内容必须在同一个文件中。
模块定义的内容缺省是全局的。
d)Form窗口类定义语句
标准格式:
Form 窗口类 End Form
HB++中,Form语句定义的窗口类将在编译后执行前自动创建一个窗口实例,并创建一个全局的静态变量:窗口类。
在Form...End Form中定义的所有内容,都将是此窗口的成员属性或方法或事件。
窗口中插入控件的方法很简单,如下面例子:(由于还没有开发完可视化编程部分,所以暂可以使用以下方式)
Form 窗口类
Public withEvent button as TButton
public withEvent treeView as TTReeview
public withEvent edit as TText
public withEvent coolBar as TCoolBar
End Form
上面例子中,窗口中将自动被插入了一个按钮、显示树、编辑框、工具条。当没有定位,如果想定位,继续写下窗口类的构造函数,在构造函数中将各控件定位。定位方法可以是赋值给Left、Top、Width、Height或指定Align方式定位。
窗口只有当程序结束时才会被自动释放,如果希望强制释放删除,将上例的窗口类置空即可:
Set 窗口类 = NULL
其他对象类的强制释放删除同样如此。
e)TypeDef类型别名定义语句
标准格式:
TypeDef 已有类型名类型的别名
已有类型名可以是任何HB++的类型(包括类模板)。
类型别名的使用方法与类型名相同,虽然它不是一个新的类型,但与它指向的类型完全相同。
f)Struct结构类型定义语句
标准格式:
Struct 结构名 From 已有的类型名
End Struct
在HB++中,Struct和Class的定义几乎完全一样,使用时可以当成一种方式使用。
g)Dim变量定义语句
标准格式:
Dim 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New] 类型名 [<类型参数表>]...]
变量名:动态变量名称;
[(数组大小)]:可选,定义数组;
类型名:HB++所有类型名;
[<类型参数表>]:可选,如果类型是类模板,此处的类型参数表将是此类模板所需的类参数。参数最多可以是十个。
h)Static静态变量定义语句
标准格式:
Static 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New]类型名 [<类型参数表>]...]
变量名:静态变量名称
其他同Dim定义语句说明。
i)Public公有变量定义语句
标准格式:
Public [Static] 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New] 类型名 [<类型参数表>]...]
变量名:公有变量名称
使用Static说明变量是公有的静态变量,不使用的缺省是动态标量。
其他同Dim定义语句说明。
j)Private私有变量定义语句
标准格式:
Private [Static] 变量名[(数组大小)] As [New] 类型名 [<类型参数表>][,变量名 As [New] 类型名 [<类型参数表>]...]
变量名:私有变量名称
使用Static说明变量是私有有的静态变量,不使用的缺省是动态标量。
其他同Dim定义语句说明。
注意:在变量定义中,如果是对象类型的变量,可以使用New来直接创建类实例,但New不能在类属性定义中使用。
如果变量定义中没有使用New,可以在执行程序体中使用New语句来创建对象类。例如:
Dim a as TForm
Set a = New TForm
5. 事件定义语句
a)Event事件定义语句
标准格式:
Event 事件函数名([[ByVal | ByRef] 参数名 As 类型名][,[ByVal | ByRef] [Optional] 参数名 As 类型名[= 常量表达式]]...)
Event事件定义语句定义了事件函数的函数名和参数形式。
Event语句必须在类定义中使用。
当定义类实例的此事件函数时,事件函数名定义格式如下:
类实例变量名_事件函数名
例如:
Module 例子模块
Class 例子类
Pulic Event Over(ByVal X as Long,ByVal Y as Long)
Public OldX as Long,OldY as Long
Function Line(ByVal X as Long,ByVal Y as Long)
RaiseEvent Over(X,Y)
窗口类.Line(OldX,OldY,X,Y)
End Function
'预先定义事件过程函数的方法:
'有了预先定义的事件函数,此类的类实例在创建构造后,自动拥有此事件函数的处理过程。
Function _Over(ByVal X as Long,ByVal Y as Long)
if X>0 And X <100 And Y>0 And Y<150 Then
Msgbox ("进入此区域有效!")
end if
End Function
End Class
End Module
Form 窗口类 From TForm
Public withEvent b as TButton
Punlic c as 例子类
Public withEvent d as 例子类
function b_Click()
end Function
Function c_Over(ByVal X as Long,ByVal Y as Long)
if X>100 And X <200 And Y>150 And Y<300 Then
Msgbox ("不能进入此区域!")
end if
End Function
End Form
b)RaiseEvent激发事件语句
标准格式:
RaiseEvent 事件函数名(参数表)
如Event中讲述的例子。
c)WithEvent定义带事件的对象类实例变量
WithEvent语句在定义变量中说明使用,它表示定义的变量将在构造时自动获取类实例,如果是控件类实例,还将插入到窗口类中。
WithEvent说明的变量必须定义是对象类型,如果是基本数据类型,HB++将报错。
如Event中讲述的例子。
6. 错误处理语句
a)OnError开启错误处理语句
标准格式:
OnError
OnError表示从此行开始如果有错误,将自动转到DoError处执行。
b)DoError错误处理语句
标准格式:
DoError [函数名(参数表)]
DoError如果后面没有跟函数,当在OnError到DoError之间的代码中出错时,将自动执行DoError语句后面到CloseError之间的程序代码。
如果后面使用了函数,当出错,将自动调用此函数。
c)CloseError关闭错误处理语句
标准格式:
CloseError
关闭错误处理。关闭后,执行出错,HB++不会激发DoError处理错误,将系统报错。
d)Resume恢复执行语句
标准格式:
Resume [Next | Exit]
Resume:错误处理完毕后,使用此语句将返回到出错的语句上继续执行
Resume Next:错误处理完毕后,使用此语句将返回到出错的下一条语句
Resume Exit:错误处理完毕后,使用此语句将退出当前函数。
注意:HB++的错误处理机制允许嵌套使用。当出错时,HB++会自动寻找最近的错误处理的DoError。例如下例:
Function abc(a as long,b as long)
dim c as long
OnError
a=10
b=0
c=a/b
OnError
a=5
c=a/b
DoError
Msgbox(a)
Resume Next
CloseError
a=20
c=a/b
DoError
MsgBox(a)
Resume Next
ClsoeError
end function
运行结果:第一次提示“10”,第二次提示“5”,第三次提示“20”。
7. 属性函数定义
a)Property Get读操作函数定义语句
标准格式:
Property Get 属性函数名() As 类型名[<>]
End Property
b)Property Let基本数据类型写操作函数定义语句
标准格式:
Property Let 属性函数名([ByVal | ByRef] 参数名 As 基本数据类型名[<>])
End Property
c)Property Set对象类型写操作函数定义语句
标准格式:
Property Set 属性函数名([ByVal | ByRef] 参数名 As 对象类型名[<>])
End Property
注意:Property Get与Property Let配对或Property Get与Property Set配对,当配对两个同名属性函数名的类型一定要相同
d)只读属性或只写属性
只读属性:仅仅使用Property Get定义属性读函数。
只写属性:仅仅使用Property Let或Property Set定义属性写函数。
例子:
Module 例子模块
Class 例子类
Private FData as Long
Property Get Data() as Long
Data=FData
End Property
Property Let Data(ByVal Value as Long)
FData=Value
End Property
End Class
Function Dispaly()
dim d as New 例子类
d.Data=10
Msgbox(d.Data)
end Function
End Module