ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:24.58KB ,
资源ID:5633156      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5633156.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(线性化函数.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

线性化函数.docx

1、线性化函数一、线性化函数(串行化函数)-CObject:Serialize功能: 从档案文件中读取该对象或者向档案文件中写入该对象 必须为希望串行化的每个类重载Serialize函数,被重载的Serialize函数首先必须调用基类的Serialize函数。在类的声明中必须使用DECLARE_SERYAL宏,并且在类的执行过程中必须使用IMPLEMENT_SERIAL宏IMPLEMENT_SERIAL二、IMPLEMENT_SERIAL( class_name, base_class_name, wSchema )参数: class_name 类的实际名字(不用引号括起来)。 base_clas

2、s_name 基类的名字(不用引号括起来)。 wSchema 一个UINT类型的版本号,将被用在存档中,使得解串行程序能够识别并处理早期版本的程序所生成的数据。它的值不能是1,一般是大于等于0的整数。 说明:这个宏为动态的CObject派生类对象生成必要的C+代码,使它能够在运行时访问类名及其在继承关系中的位置。在.CPP模块中使用IMPLEMENT_SERIAL宏,然后一次性地连接生成的目标代码。如果磁盘文件上的对象的版本号和内存中的对象的版本号不一致,MFC将抛出一个CArchiveException异常,阻止程序读入一个不匹配版本的对象。例题.从CObject或其派生类派生出用户的类2.

3、重载Serialize()成员函数,加入必要的代码,用以保存对象的数据成员到CArchive对象以及从CArchive对象载入对象的数据成员状态。3.在类声明文件中,加入DECLARE_SERIAL宏。编译时,编译器将扩充该宏,这是串行化对象所必需的。4.定义一个不带参数的构造函数。5.在实现文件中加入IMPLEMENT_SERIAL宏。class CRegister:public CObject public: DECLARE_SERIAL( CRegister)/必需提供一个不带任何参数的空的构造函数 CRegister(); public: CString strIncome; CStr

4、ing strKind; BOOL bMarried; CString strName; int nSex; CString strUnit; int nWork; UINT nAge; void Serialize(CArchive&); ; MFC在从磁盘文件载入对象状态并重建对象时,需要有一个缺省的不带任何参数的构造函数。串行化对象将用该构造函数生成一个对象,然后调用Serialize()函数,用重建对象所需的值来填充对象的所有数据成员变量。 构造函数可以声明为public、protected或private。如果使它成为protect或private,则可以确保它只被串行化过程所使用。

5、 在类定义文件中给出Serialize()的定义。它包括对象的保存和载入两部分。前面已经提到,CArchive类提供一个IsStoring()成员函数指示是保存数据到磁盘文件还是从磁盘文件载入对象。void CRegister:Serialize(CArchive& ar) /首先调用基类的Serialize()方法。CObject:Serialize( ar);if(ar.IsStoring() arstrIncome; arstrKind; ar(int)bMarried; arstrName; arnSez; arstrUnit; arnWork; arstrIncome; arstrK

6、ind; ar(int)bMarried; arstrName; arnSex; arstrUnit; arnWork; ar(WORD)nAge; 我们看到,对象的串行化实际上是通过调用对象中的数据成员的串行化来完成的。 注意:CArchive类的和操作符并不支持所有的标准数据类型。它支持的数据类型有:CObject、BYTE、WORD、int、LONG、DWORD、float和double。其他的类型的数据要进行串行化输入输出时,需要将该类型的数据转化为上述几种类型之一方可。 另外,在类的实现(类定义)文件开始处,还要加入IMPLEMENT_SERIAL宏。 IMPLEMENT_SERIA

7、L( CRegister, CObject, 1 ) IMPLEMENT_SERIAL宏用于定义一个从CObject派生的可串行化类的各种函数。宏的第一和第二个参数分别代表可串行化的类名和该类的直接基类。第三个参数是对象的版本号,它是一个大于或等于零的整数。MFC串行化代码在将对象读入内存时检查版本号。如果磁盘文件上的对象的版本号和内存中的对象的版本号不一致,MFC将抛出一个CArchiveException异常,阻止程序读入一个不匹配版本的对象。现在,我们就可以象使用标准MFC类一样使用CRegister的串行化功能了。CArchive ar; CRegister reg1,reg2; ar

8、reg1 D、this8、已知类A是类B的友元,类B是类C的友元,则( )A、类A一定是类C的友元B、类C一定是类A的友元C、类C的成员函数可以访问类B的对象的任何成员D、类A的成员函数可以访问类B的对象的任何成员9、下面( )是函数重载。 A、void play(int) 和void play(float) B、play( ) 和 play() C、void play(int) 和int play(int) D、void play( ) 和int play( )10、下列说法中正确的是( ) A.类定义中只能说明函数成员的函数头,不能定义函数体。 B.类中的函数成员可以在类体中定义,也可以在

9、类体之外定义。 C.类中的函数成员在类体之外定义时必须要与类声明在同一文件中。D.在类体之外定义的函数成员不能操作该类的私有数据成员。11、Windows操作系统主要基本内核元件中,_支持与操作系统密切相关的功能:如进程加载、文本切换、文件I/O以及内存管理、线程管理等。( )A、GDI B、KERNEL C、USER D、以上都不是。12、一个视图对象能连接( )文档对象,一个文档对象能连接( )视图对象。A、一个,多个 B、多个,一个 C、一个,一个 D、多个,多个13、所有的控件都是 ( ) 类的派生类,都可以作为一个特殊的窗口来处理。A、CView B、CWnd C、CWindow D

10、、CDialog14、设置编辑控件的文本内容,可使用函数 ( )A、SetWindowText( ) B、SetSel( )C、ReplaceSel( ) D、GetWindowText( )15、根据对话框的行为性质,对话框可以分为两类:( )A、对话框资源和对话框类 B、模式对话框和非模式对话框C、对话框资源和对话框模板 D、消息对话框和模式对话框16、以下控件中,( )没有Caption属性。 A、按钮 B、群组框 C、编辑控件 D、静态控件17、菜单项助记符前用( )引导。 A、% B、& C、# D、$18、MFC中的集合类包括( )。 A、对象、列表和映射 B、数组、列表和对象 C

11、、数组、列表和映射 D、数组、列表和链表19、文档负责将数据存储到永久存储介质中,通常是磁盘文件或数据库,存取过程称为( )。 A、文件访问 B、串行化 C、文件读写 D、格式化20、下列对模板的声明,正确的是( )。 A、template B、template C、template D、template二、选择填空题(每空1分,共20分)1、如果在基类和派生类中都包含其他类的对象(即有对象成员),则在创建派生类的对象时,首先执行 的构造函数,接着执行 的构造函数,然后执行_ _的构造函数,最后才执行 的构造函数。A、基类的对象成员 B、派生类的对象成员 C、基类 D、派生类2、所有的文档类都

12、派生于 5 ,所有的视图类都派生于 6 。A、CView B、CWindow C、CDocument D、CFormView3、 7 包括键盘和鼠标的输入。这一类消息首先放在系统消息队列中,然后由Windows将它们送入应用程序消息队列中,由程序来处理消息; 8 用来与Windows的控制对象,如列表框、按钮、复选框等进行双向通信。当用户在列表框中改动当前选择或改变了复选框的状态时发出此类消息。A、系统消息 B、用户消息 C、输入消息 D、控制消息4、使用 9 获取的设备上下文在退出时,必须调用ReleaseDC( )释放设备上下文。 A、GetWindowRect( ) B、GetDC( )

13、 C、BeginPaint() D、GetClientRect( )5、常用的CButton类的成员函数中: 获得一个按钮控件的选中、选择和 聚焦状态; 得到一个按钮的选中状态; 设置一个按钮的选中状态。 A、GetState( ) B、SetState( ) C、SetCheck( ) D、GetCheck( ) E、GetButtonStyle( ) 6、滚动条类CScrollBar的成员函数规定了滚动条的操作。设置滚动条的范围使用 函数,设置滚动块的位置使用 函数,获取滚动块的当前位置使用 函数。A、SetPos B、SetRange C、SetScrollRange D、GetPosE

14、、SetScrollPos F、GetScrollPos G、 GetScrollRange7、如果类中的成员只能被本类的成员函数和友元函数访问,则这些成员的访问权限为_16 _;如果类中的成员能够被类外的函数访问,则这些成员的访问权限为:_17_。 A、protected B、private C、public D、static8、列表框分为 18 和 19 两种, 20 中任一时刻只能选择一项。 A、组合框 B、单选列表框 C、多选列表框 D、编辑框三、程序设计题(共60分)1、下列shape类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同

15、形状的图形面积总和的函数。请从shape类派生三角形类(triangle)、矩形类(rectangle)、并给出具体的求面积函数。 (10分) class shape public: virtual float area( )=0 ; float total(shape *s ,int n) float sum=0.0; for(int i=0; in: i+)sum=sum+i.area( ); return sum; 2、创建一个记录通讯录内容的新类Caddrlist,包含:姓名、住址、电话、出生日期,并使该类可以实现串行化。请写出可以实现要求的CAddrlist.h和CAddrlist.

16、cpp文件的内容。(10分)3、(20分)该应用有4个命令按钮,作为增加项目、删除项目和全部删除项目以及退出程序的按键。另外,还有一个编辑框作为新项目名称输入框IDC_NAME_EDIT对应控件变量为m_Name(类型为CString),1个静态文本用于显示项目数目,列表框用于项目列表对应控件变量为m_List1,1个静态文本用于显示标题。界面下图所示。根据要求写出代码:(1)对话框初始化消息处理函数OnInitDialog()里,向列表框添加“China”,“Germany”两项内容。BOOL CEx6_3Dlg:OnInitDialog() return TRUE; (2) “增加”命令按

17、钮的单击消息处理函数OnAdd() 将新项目名称输入框的内容增加到列表框中。void CEx6_3Dlg:OnAdd() (3)“删除”按钮的单击消息处理函数OnDel() 将当前列表框中选中的项删除void CEx6_3Dlg:OnDel() 4、下面是一个基于对话框的应用程序,用来求解一元二次方程的根。当用户在A、B、C 三个编辑框中输入3个参数后,单击【计算】按钮,将显示出该方程的根。(10分)各控件对应的成员变量见下表:控件ID号变量类型变量名IDC_A_EDITintm_aIDC_B_EDITintm_bIDC_C_EDITintm_cIDC_X1_EDITCStringm_x1ID

18、C_X2_EDITCstringm_x2试写出计算按钮的单击消息处理函数。void CEx3_4Dlg:OnButton1() 5、简述用MFC进行ODBC的编程过程。(10分)20052006学年第2学期VC+程序设计试题答案及评分标准一、单项选择题(每小题1分,共20分)题号12345678910答案BCCAAABDAB题号11121314151617181920答案BABABCBCBD二、 选择填空题(每空1分,共20分)题号答案ACBDCACDBA题号1617181820答案DCCEFBCBCB三、程序设计题(每题10 分,共60分)1、 每个类5分#include class tri

19、angle:public shape public: virtual float area( ) float s=(a+b+c)/2; return sqrt(s*(s-a)*(s-b)*(s-c); private: float a,b,c; ;class rectangle:public shape public: virtual float area( ) return a*b; private: float a,b; ;2、/Addrlist.h文件内容: 5分class CAddrlist : public CObject public: CString Name; CString

20、Address; CString Tel; CTime Birth; CAddrlist(); DECLARE_SERIAL(CAddrlist) / 使对象可串行化 virtual void Serialize( CArchive & ar ); /重载串行化函数 ;/ Addrlist.cpp文件内容: 5分IMPLEMENT_SERIAL(CAddrlist,CObject, 0) void CAddrlist:Serialize(CArchive & ar) CObject:Serialize(ar); if ( ar.IsStoring() ) arNameTelAddressNam

21、eTelAddressBirth; 3、第一个函数5分,第二个函数8分,第三个函数7分,(1) BOOL CEx6_3Dlg:OnInitDialog( ) m_List1.AddString(China); m_List1.AddString(Germany);UpdateData(FALSE);return TRUE;(2) void CEx6_3Dlg:OnAdd() if ( m_Name.IsEmpty() ) MessageBox(项目名不能为空!); return; m_Name.TrimLeft(); m_Name.TrimRight(); if ( m_List1.FindS

22、tring(-1,m_Name)!=LB_ERR ) MessageBox(列表框中已有相同的项目名,不能添加!); return; m_List1.AddString(m_Name);UpdateData(FALSE); (3) void CEx6_3Dlg:OnDel( ) int nIndex=m_List1.GetCurSel(); if(nIndex!=LB_ERR) m_List1.DeleteString(nIndex); else MessageBox(当前没有选择项或列表框操作失败);UpdateData(FALSE); 4、 void CEx6_1Dlg:OnButton1

23、() UpdateData(); double disc; disc=(double)(m_b*m_b-4*m_a*m_c); if ( fabs(disc)1e-6 ) /如果disc大于0 double x1,x2; x1=(-m_b-sqrt(disc)/(2*m_a); x2=(-m_b+sqrt(disc)/(2*m_a); m_x1.Format(x1=%6.2f,x1); m_x2.Format(x2=%6.2f,x2);else /如果disc小于0 double realpart,imagpart; realpart=-m_b/(2*m_a); imagpart=sqrt(-disc)/(2*m_a); m_x1.Format(x1=%6.2f+%6.2fi,realpart,imagpart); m_x2.Format(x2=%6.2f-%6.2fi,realpart,imagpart); UpdateData(FALSE); 5、关键知识点:(1)设计数据库。(2)定义ODBC数据源。(3)创建应用程序外壳。(4)设计主窗体。(5)将控件与数据库字段相关联。(6)编写代码实现添加新记录功能。(7)编写代码实现删除记录功能。(8)编写代码实现对记录排序功能。(9)编写代码实现查找记录功能等。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1