VB教程 第六章 过程、模块与类
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.按地址传递参数 按地址传递参数使过程用变量的内存地址去访问实际变量 的内容。结果,将变量传递给过程时,通过过程可永远改 变变量值。按地址传递参数在 Visual Basic 中是缺省的。 例如: Sub PostAccounts (intAcctNum as Integer) . '这里放语句。 End Sub 3.使用可选的参数 4.提供可选参数的缺省值 5.使用不定数量的参数
下面分别对被调用过程在窗体模块、类模块和标准模块三种 情况说明: ① 窗体中的过程 ② 类模块中的过程 ③ 标准模块中的过程
一个很好的例子: 交通信号灯控制的例子
一个重要的思想(递归 一个重要的思想 递归) 递归
递归就是一个过程调用自己来完成某个特定的 任务。在递归过程中,一个过程的某一步要用 到其自身的上一步或几步的结果。递归分为两 种类型:直接递归和间接递归。Visual Basic的 过程具有递归调用功能。 递归可能会导致堆栈上溢。通常 Static 关键字 和递归过程不在一起使用。使用递归过程要特 别小心,不加控制的递归通常会引起溢出堆栈 空间错误信息。如下例:
作用域不同([Private | Public | Friend]) 生命期不同([Static]) 但是arglist语法较简单:可选的。代表在调用时要传递给 Function 过程的参数变量列表。多个变量应用逗号隔开。 一点注意:若 Function 过程会改变某个数学表达式中变 量的值,则应避免在此表达式中使用该函数。例如: I=2 J=3 X=(Sum (I,J)+1)/Sum(I,J) Function Sum (A As Integer, B As Integer) As String A=A+2 Sum=A+B End Function 结果如何?怎么修改?
2. 函数过程 .
Visual Basic 包含内置的或内部的函数,如 Sqr、Cos 或 Chr。此外,还可用 Function 语句编写自己的 Function 过程。 函数过程的语法是: [Public | Private | Friend] [Static] Function name [(arglist)] [As type] [statements] [name = expression] [Exit Function] [statements] [name = expression] End Function
其中的 arglist 参数的语法 :
[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue] Notice:
Sub 过程可以是递归的(后面会告诉你) Sub 过程不能出现在等号的右侧 Exit Sub 语句任何位置都可以有
MsgBox Msg End If Msg = "" Loop While N >= 0 End Sub Public Function Factorial(N As Long) as Long If N >0 Then Factorial = N * Factorial(N - 1) Else Factorial = 1 End If End Function 可以用递归算法解决的问题一般必须具备下列两个条件: 可以将原问题转化为较低级别的同样的问题 存在边界条件,即经过若干次递推后能够找到一个已知结果。
Sub BeepSound(n As Interger) Dim i As Interger, j As Long For i= 1 to n Beep
For j= 0 to 1000000 Next Next End Sub 我们可以用 Call BeepSound(5) 或BeepSound 5 调用BeepSound, 所以我们可以在窗体Form1和按钮Command1的Click事件过程 中调用BeepSound过程(如下:) Private Sub Command1_click( ) Call BeepSound(5) End Sub Private Sub Form_Click() BeepSound 3 End Sub
例:监视调用堆栈及递归调用次数。 Option Explicit Sub Main() Static intX As Integer intX = intX + 1 Debug.Print intX Main End Sub Private Sub Form_Click() Main End Sub
过程的创建与调用
1. 创建新过程 要创建新的通用过程,可以通过二种方法: ⑴ 在“代码”窗口输入过程头并按下回车键。过程头以 Sub 或 Function 打头,再接一个名字。例如: Sub UpdateForm () Function GetCoord () ⑵ 最常用的还是通过“添加过程”菜单完成新过程的创 建。2. 编辑、修改现有过程 3. 调用过程 ⑴ 调用 Sub 过程 ⑵ 调用函数过程 4. 调用其它模块过程
如何向过程传递参数
*什么是参数的数据类型 过程中的代码通常需要某些关于程序状态的信息才能完成它的 工作。信息包括在调用过程时传递到过程内的变量。当将变量 传递到过程时,称变量为参数。 参数的传递方式有一下几种: 1.按数值传递参数 按值传递参数时,传递的只是变量的副本。如果过程改变了这 个值,则所作变动只影响副本而不会影响变量本身。 例如: Sub PostAccounts (ByVal intAcctNum as Integer) . '这里放语句。 End Sub
我们可以通过此图来了解这一操作:
调用 事件过程 Command1_Click 返回 通用过程 BeepSound 调用 事件过程 Form_Click 返回 由上可知,子过程分为两种:通用过程和事件过程
一点补充:(课本P164) 可以使用 Option Explicit 语句来强制显式定义变量。 为了更清楚地说明这个问题,我们运行下例: 'Option Explicit Public X As Single Private Sub Form_Load() ‘Dim X As Integer ’如果注释掉有什么效果? X = X + 0.1 Debug.Print "X="; X Debug.Print TypeName(X) End Sub 建议使用Option Explicit 语句来强制显式定义变量
结果是什么?
例6-3:编写程序计算N的阶乘。(N=0~12) 由数学定义:0的阶乘为1,正数N的阶乘为: N!=N*(N-1)*(N-2)*……*2*1 源程序为: Option Explicit Private Sub Form_Load() Dim N As Long Dim Msg As String Dim L As Long Do N = Val(InputBox("Enter a number from 0 to 12 (or -1 to end)")) If N >= 0 And N <= 12 Then L = Factorial(N) Msg = Str$(N) & " Factorial is " & Str$(L)
[第6章 过程、模块与类 第 章 过程、模块与类]
6.1 VB的过程 6.2 VB的代码模块 6.3 VB的标准模块 6.4 VB的类
6.1 VB的过程 的过程
三种过程
Sub (子程序)过程 Function(函数) 过程ifferences?
For example
*我们创建这样一个应用程序,它包含一个按钮,当用户在 窗体上单击时,计算机的喇叭会发出3声“嘟”的声音;如果 用户在按钮上单击,喇叭响五下. 我们定义一个控制计算机操作的过程,命名为BeepSound, 喇叭的次数作为参数有调入者传入,参数命名为n.
过程BeepSound如下:
1. 子过程(Sub) . 子过程(
子过程的语法是: [Private | Public | Friend] [Static] Sub name [(arglist)] [statements] [Exit Sub] [statements] End Sub
作用域不同([Private | Public | Friend]) 生命期不同([Static])
6.3 VB的标准模块 的标准模块
在标准模块中,一般只包含过程、类型以及数据的声明和定 义。模块级别声明和定义都被默认为 Public。标准模块不属 于任何窗体,但可以指定窗体的内容,可以在标准模块中建 立新的窗体,然后在窗体模块中对窗体进行处理。
6.4 VB的类 的类
类是支持面向对象思想的重要概念,它是实现数据隐蔽和封装 的基本单元,是实现面向对象其他特性的基础,类模块用于建立 用户定制类。类模块看起来几乎和普通的标准模块一模一样, 用户也可以在其中编制代码,完成几乎完全一样的功能。但 其实又很大区别.
3. 属性过程 .
可以对类模块添加和操作属性的过程称属性过程。 以 Property Let、Property Get,或 Property Set 语句 开始,而以 End Property 语句退出。 Visual Basic 提供下面所列的三种属性过程: Property Get 返回属性的值。 Property Let 设置属性的值。 Property Set 设置对象属性的值(即该属性含有对象引用)。 一个特殊的子过程Sub Main过程: 这个过程必须是一个子过程,且不能在窗体模块内,只能在 标准模块内建立。
? 什么时候应用值传递和什么时候应用地址 传递
6.2 VB的代码模块 的代码模块
VB 的代码存储在模块中。模块有三种类型:窗体、标准和类。 每个标准模块、类模块和窗体模块都可包含: 声明:可将常数、类型、变量和动态链接库 (DLL) 过程的声明 放在窗体、类或标准模块的模块级。声明通常放在模块的开头 部分。 过程:Sub、Function 或者 Property 过程包含可以作为单元来执 行的代码片段。 ⑴ 窗体模块(什么情况) ⑵ 标准模块(什么情况) ⑶ 类模块