本示例演示了如何用类模块定义类(然后可以用它创建对象)。还将展示如何为新的类创建属性和方法并演示对象是如何创建和撤消的。
打开一个新的“标准 EXE”工程,在“工程”菜单中选中“添加类模块”插入一个类模块。在窗体上画四个按钮。下表列出了本示例中要设置的对象属性值。
对象 属性 设置值
Class 类模块 Name Thing
Command1 Caption 显示该 Thing
Command2 Caption 颠倒该 Thing 的名称
Command3 Caption 创建新的 Thing
Command4 Caption 临时的 Thing
注意 类模块保存在扩展名为 cls 的文件中。
添加下列代码到类模块的声明段:
Option Explicit
Public Name As String
Private mdtmCreated As Date
变量 Name 将成为 Thing 对象的属性,因为它声明为 Public。
注意 不要把这个 Name 属性和上表设置的类模块的 Name 属性混淆(类模块的 Name 属性为 Thing 类提供了名称)。为什么要给 Thing 类命名呢?最好应该反过来问,为什么不?应该给 Thing 类一个名称因为事物总是有名称的!应该知道 Visual Basic 使用属性和方法的名称并没有什么特殊点。可以为自己不同的类使用相同的属性和方法名。
变量 mdtmCreated 是私有数据成员,用于存储只读的 Created 属性的值。Created 属性返回 Thing 对象产生的日期和时间。为了实现 Created 属性,将以下 Property Get 代码添加到类模块的声明部分:
Property Get Created() As Date
Created = mdtmCreated
End Property
注意 如果通过“工具”菜单下的“添加过程”对话框添加属性过程,应确认删除了 Property Let 声明,它是通过本对话框自动添加的。Property Let 只用于读写属性,参见“运用属性过程”部分。
Thing 对象有一个方法 ReverseName,用于颠倒 Name 属性的字母顺序。它不返回值,因此是一个 Sub 过程。向类模块添加以下 Sub 过程。
Public Sub ReverseName()
Dim intCt As Integer
Dim strNew As String
For intCt = 1 To Len(Name)
strNew = Mid$(Name, intCt, 1) & strNew
Next
Name = strNew
End Sub
类模块有两个事件:Initialize 和 Terminate。从类模块的“对象”下拉列表中,选择“类”。下拉出的“过程”列表将显示事件。将以下代码放到事件过程中:
Private Sub Class_Initialize()
'设置对象创建的日期/时间,
' 由只读的 Created 属性返回。
mdtmCreated = Now
'显示对象属性。
MsgBox "Name: " & Name & vbCrLf & "Created: " _
& Created, , "Thing Initialize"
End Sub
Private Sub Class_Terminate()
'显示对象属性。
MsgBox "Name: " & Name & vbCrLf & "Created: " _
& Created, , "Thing Terminate"
End Sub
一般 Initialize 事件包含了对象创建时所需的所有代码,如为 Created 属性提供时间标记。Terminate 事件包含撤消对象后进行清理的所有代码。
本示例中,两个事件主要用来提供 Thing 对象创建或撤消的可视化指示。
Thing 对象的使用
添加以下代码到窗体模块的声明段:
Option Explicit
Private mth As Thing
变量 mth 保存了对一个 Thing 对象的引用,该对象是在窗体的 Load 事件中产生的。将以下代码分别添加到 Form_Load 事件过程及四个按钮的 Click 事件过程中。
Private Sub Form_Load()
Set mth = New Thing
mthName = InputBox("Enter a name for the Thing")
End Sub
'按钮“显示该 Thing”
Private Sub Command1_Click()
MsgBox "Name: " & mthName & vbCrLf _
& "Created: " & mthCreated, , "Form Thing"
End Sub
'按钮“颠倒该 Thing 的名称”
Private Sub Command2_Click()
mthReverseName
'单击“显示该 Thing”
Command1Value = True
End Sub
'按钮“创建新的 Thing”
Private Sub Command3_Click()
Set mth = New Thing
mthName = InputBox( _
"Enter a name for the new Thing")
End Sub
'按钮“临时的 Thing”。
Private Sub Command4_Click()
Dim thTemp As New Thing
thTempName = InputBox( _
"Enter a name for the Temporary Thing")
End Sub
运行工程
按 F5 键运行该工程。观察 Form_Load 事件过程可知 New *** 作符用于创建 Thing 对象。对该对象的引用赋给了变量 mth。
InputBox 函数要求输入 Thing 的名称。输入名称并按 ENTER 键后,返回值被赋予 Thing 对象的 Name 属性。
显示窗体 Thing
可以通过按下第一个按钮“显示该 Thing”来验证所赋的 Name 属性值,此时将显示一个包含了 Thing 对象所有属性的消息框。
颠倒 Thing 的名称
按第二个按钮“颠倒该 Thing 的名称”。该按钮调用 ReverseName 方法把 Thing 对象的名称倒过来,然后按第一个按钮显示更新过的属性值。
创建新的 Thing
单击“创建新的 Thing”按钮撤消已存在的 Thing 对象后再创建一个新的对象。(或,反过来进行,创建一个新的 Thing 对象然后撤消旧的。)
New *** 作符创建一个新的 Thing,因此可以看见新 Thing 的 Initialize 事件显示的消息框。单击“确定”,对新 Thing 的引用被赋给了窗体级的变量 mth。
这样做清除了对旧的 Thing 的引用。由于不再有引用,所以它被撤消,因此可以看到 Terminate 事件的消息框。单击“确定”后,InputBox 语句要求输入新 Thing 的名称。
注意 如果希望在创建新的 Thing 之前撤消旧的,可以添加代码 Set mth = Nothing 到事件过程的开始部分。
临时的 Thing
第四个按钮演示了对象存活期的另一个方面。按下后,将提示输入临时 Thing 的名称。
可是等一等,这还不是一个临时的 Thing 对象。还没有见到其 Initialize 消息框,怎么赋给它名称呢?
由于变量 thTemp 已被 As New 声明过了,因此当一个属性或方法被使用时就会创建 Thing 对象。这将发生在输入框返回的值被赋给 Name 属性时。在输入框键入名称后单击“确定”。
此时可以看到 Initialize 的消息框,其中的 Name 属性还是空白。当单击“确定”关闭消息框后,InputBox 语句的值终于赋给了 Name 属性。看看这一行代码作了多少事。
当然,当完成了这一切后,Click 事件过程也结束了,变量 thTemp 也超出可见范围,对临时 Thing 的对象引用也被释放,因此可以看到 Thing 的 Terminate 消息框,注意其中包含所提供的名称。
每次单击该按钮将创建另一个临时 Thing,并进行命名,将它撤消。
关闭程序
单击窗体的“关闭”按钮可终止应用程序。不要使用工具栏上的 End 按钮。应用程序终止时,Form1 被撤消。变量 mth 也超出可见范围,Visual Basic 清除对 Thing 的引用。由于已不存在对 Thing 的引用,因此被撤消并显示 Terminate 事件的消息框。
再次运行应用程序,这次用工具栏上的 End 按钮终止程序。注意这时没有显示 Thing 对象的 Terminate 消息框。
应特别记住使用 End 按钮终止应用程序或在代码中用 End 语句立即退出应用程序,并不能运行任何对象的 Terminate 事件。最好能通过卸载所有的窗体来关闭应用程序。
通过 F8 键以每次运行一行代码的形式运行示例,是一个很有用的方法。这有利于理解创建和撤消对象的事件的顺序。
重点 在实际的应用程序中,Initialize 和 Terminate 事件不应包含消息框或其它任何使 Windows 显示消息的代码。一般来说,调试对象的存活期时最好用 DebugPrint 语句。
在前一节我们介绍了标准库的sys模块和os模块,本节将介绍标准库的fileinput模块和time模块。
fileinput模块能够让我们轻松地迭代一系列文本文件中的行。
fileinput模块中一些重要的函数,也是我们在实际开发中需要经常用到的,具体如下表所示:
fileinputinput(): fileinput模块中最重要的函数,它返回一个可在for循环中进行迭代的对象。
fileinput filename(): 返回当前文件(即正在处理的行所属的文件)的文件名。
fileinput lineno(): 返回当前行的编号。
fileinput filelineno(): 返回当前行在当前文件中的行号。
fileinput isfirstline(): 在当前行为当前文件中的第一行时返回True,否则返回False。
fileinput isstdin():在当前文件为sysstdin时返回True,否则返回False。
fileinput nextfile():关闭当前文件并跳到下一个文件,且计数时忽略跳过的行。
fileinput close():关闭整个文件链并结束迭代。
上面关于介绍的fileinput模块中的函数的实例用法如下my_fileinputpy程序所示:
time模块包含用于获取当前时间、 *** 作时间和日期、从字符串中读取日期、将日期格式化为字符串的函数。日期可表示为实数,也可表示为包含9个整数的元组。例如,元组(2021, 6, 8, 22, 13, 56, 1, 21, 0)表示2021年6月8日22时13分56秒。日期元组中各字段含义如下表所示:
秒的取值范围为0~61,这考虑到了闰一秒和闰两秒的情况。夏令时数字是一个布尔值(True或False),但如果你使用-1,那么mktime[将时间元组转换为时间戳(从新纪元开始后的秒数)的函数]可能得到正确的值。
模块time中有一些重要的函数,也是我们在实际开发中需要经常用到的,具体如下表所示:
timeasctime(): 将当前的时间转换成字符串形式,如果不想使用当前时间,也可以传递一个时间元组作为参数。如果要使用更复杂的时间格式化,可以使用strftime()函数。
timelocaltime(): 将一个实数转换成时间元组(这里是本地时间),如果要转换成国际标准时间,应该使用timegmtime()函数。需要注意这里的实数是一个从新纪元开始后的秒数,世界新纪元指的是 1970年1月1日0时0分0秒,如果是本地新纪元的话,需要加上本地的时区时间。
timemktime(): 将时间元组转换成从新纪元开始后的描述,这与timelocal()函数功能相反。
timesleep(): 让解释器等待指定的秒数,即程序暂停指定的秒数。
timestrftime(): 将时间元组按照指定的格式转换成字符串格式。常用的格式符有:%Y表示年,%m表示月,%d表示日,%H表示时,%M表示分,%S表示秒。更多格式符可参考官方标准文档。
上面关于介绍的time模块中的函数的实例用法如下my_timepy程序所示:
注意:另外还有两个较新的关于时间的模块:datetime和timeit,大家可执行查阅相关文档。
本节主要介绍了以下内容:
如果有需要文中小程序的可以私信我哟!
欢迎大家转发、评论!
#Python# #python# #Python基础# #python打卡# #Python编程从入门到实践#
#include<stdioh>
int fun1(int x,int y);
int fun1( int x,int y)
{
int max;
if(x>y)
max=x;
else
max=y;
return max;
}
void main()
{
int max,a,b;
printf("Please enter 2 numbers:(a,b)");
scanf("%d %d",&a,&b);
max = fun1(a,b);
printf("max=%d\n",max);
}
s=input('请输入4个数,用英文逗号分隔:')
l=ssplit(',')
l=[int(x) for x in l]
print('最大值:',max(l),'最小值:',min(l))
整定公式为:(AIW - 6400)/25600 790 - 40。
首先,在西门子S7-200系列PLC中,0-20mA对应的数据范围为0到32000,4mA多对应的数值是6400,同理,4-20mA的数据值范围是6400到32000,这也就对应了所需的温度-40度到750度。
下一步,设模拟量的标准电信号为A0-Am(例如4-20mA),A/D转换后数值为D0-Dm(例如6400-32000),设模拟量的标准电信号是A,A/D转换后的相应数值为D。
然后,由于是线性关系,函数关系A=f(D)可以表示为数学方程:A=(D-D0)×(Am-A0)/(Dm-D0)+A0。标准化输出信号主要为0mA~10mA和4mA~20mA(或1V~5V)的直流电信号。
最后,不排除具有特殊规定的其他标准化输出信号。温度变送器按供电接线方式可分为两线制和四线制,除RWB型温度变送器为三线制外。
根据该方程式,编译并运行程序,观察程序状态,对照仪表显示值即得出温度的显示。
扩展资料温度变送器常见故障:
温度变送器技术已经非常成熟了,在各工厂中非常常见,温度变送器经常和一些仪表配套使用,在配套使用过程中经常有一些小的故障。比较常见的故障及解决方法如下。
1、被测介质温度升高或者降低时变送器输出没有变化,这种情况大多是温度变送器密封的问题,可能是由于温度变送器没有密封好或者是在焊接的时候不小心将传感器焊了个小洞,这种情况一般需要更换变送器外壳才能解决。
2、输出信号不稳定,这种原因是温度源本事的原因,温度源本事就是一个不稳定的温度,如果是仪表显示不稳定,那就是仪表的抗干扰能力不强的原因。
3、变送器输出误差大,这种情况原因就比较多,可能是选用的温度变送器的电阻丝不对导致量程错误,也有可以能是变送器出厂的时候没有标定好。
温度变送器故障排除:
1、因为温度变送器的三阀组漏气或堵塞造成误差出现。
2、温度变送器的零位偏高(或低),造成静、差压值偏大(或小),使计算气量比实际气量偏大(或小)。
3、温度变送器的准确度等级和量程范围选择不正确,或没有按照GB/T18603-2001《天然气计量系统技术要求》要求进行选型导致计量附加误差。
ENDFUNCTION
要输入程序代码,方法与正常子程序一样,但下列情况例外:
功能模块中的数据处理
不必在功能模块的源代码中声明输出和输入参
数。系统在NCLUDE程序中执行该任务。将已
定义的参数列表当作注释行插入到源代码中中。与子程序一样,可以在功能模块中声明局部数据类型
选择“全局数据”,通过“功能库:维护功能模块”
屏幕为INCLUDE程序LTOP打开ABAP/4编辑
器。NCLUDE程序被作为第一个语句包含到程序
SAPL中。SAPL是功能组(由该组的所有功能模
块组成)的主程序。单个功能模块又包含在
INCLUDE程序中
可以用TYPES和DATA语句将数据声明写入
LTOP。该数据对功能组的所有模块是全局数
据,对该组是局部数据。调用第一个模块之后,系统立即创建他们,并始终保留最后一次模块调
用的值。
以上就是关于求个VB类模块使用例子全部的内容,包括:求个VB类模块使用例子、Python基础编程——标准库之fileinput与time模块、c/c++程序,模块化设计。自定义函数实现该程序的功能,要在主函数内实现数据的输入和输出,请补充完整。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)