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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(《Visual C++程序设计》课程考核.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

《Visual C++程序设计》课程考核.docx

1、Visual C+程序设计课程考核Visual C+程序设计大作业一. 请详细地论述面向对象的封装性和继承性。(1)封装性封装性是保证软件部件具有优良的模块性的基础。向对象的类是封装良好的模块,类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实现)显式地分开,其内部实现按其具体定义的作用域提供保护。对象是封装的最基本单位。封装防止了程序相互依赖性而带来的变动影响。面向对象的封装比传统语言的封装更为清晰、更为有力。(2)继承性向对象语言的一个重要机制,通过继承可以在一个一般类的基础上建立新类。被继承的类称为基类,在基类上建立的新类称为派生类。如果一个类只有一个基类则称为单继承,否则称

2、为多继承。通过类继承,可以使派生类有条件地具有基类的属性,这个条件就是继承方式。继承发端于抽象的层次。在人类认识事物的过程中,抽象是一种重要的方法。概念是一种抽象,对某一事物,通过抽象去掉一些细节,我们就获得了对它的基本特征和行为的一些抽象认识,形成相关的概念。如果在这个基础上再进一步抽象,我们就获得了对同一种事物的更高层次上的抽象认识。这种不同层次上的抽象认识即表达啦不同事物间的联系也表达了它们之间的差异。类继承模拟啦人类的这种思维特点。在软件实现中,继承机制提供了通过再用已有代码定义新类的手段。继承在两个不同的类(或多个类)之间建立了关系,它使一个类(称为父类)的数据结构和操作能够被其他类

3、(称为子类)再用,这样,在子类中只需要定义父类中没有的数据结构和操作即可。继承的另一个有点是表达程序中各个类之间的关系。这使程序不再是毫无关系的类的堆砌,而具有良好的机构。继承提供了一种层次抽象机制,是将类构成特定层次的一种工具。二 请结合例程分别详细的论述什么是面向对象的静态多态和运行时多态多态性是面向对象程序设计的重要特征性之一,它与封装性和继承性构成了面向对象程序设计的三大特征。所谓多态性,是指不同类型的对象接受相同的信息时产生不同的行为。这里的消息主要是指对类的成员函数的调用,而不同的行为是指成员函数的不同实现。在C+中,多态可分为两种;编译时的多态性和运行时的多态性。编译时的多态性是

4、通过函数或运算符的重载来实现的,而运行时的多态性是通过虚函数来实现的,它指在程序执行之前,根据函数和参数还无法确定应该调用哪一个函数,必须在程序的执行过程中,根据具体的执行情况动态地确定。与这两种多态性方式相对应的是两种编译方式:静态联编(也是静态多态)和动态联编(也是动态联编)(1)静态多态使用的是静态联编方式,在编译时函数和函数的实现就关联在一起,主要是通过重载和模实现,在宏多态中,是通过定义变量,编译时直接把变量替换,实现宏多态.#include using namespace std; /宏多态;a,b可以不同类型 #define sum(a,b) (a) + (b) class Ba

5、se public: void Print() /不需要定义为虚函数 cout base Print() functions endl; void Print(int val) /重载,根据参数列表不同实现函数多态 cout base Print(int) functions endl; ; class child : public Base public: void Print() /不需要定义为虚函数 cout child Print() functions endl; void Print(int val) /重载,根据参数列表不同实现函数多态 cout child Print(int)

6、 functions endl; ; template void func(T &p) p.Print(); p.Print(1); int main() Base base ; child ch; int a = 23, b = 19; double fa = 13.32, fb = 29.36; func(base); func(ch); cout sum(a,b) endl; cout sum(fa,fb) endl; return 0;(2)动态多态主要通过虚函数实现,父类指针或者引用能够指向子类对象,调用子类的虚函数,所有在编译时是无法确定调用哪个虚函数,每个子类都维护着一张虚函数表

7、,程序执行时查询虚函数表来确定调用哪个虚函数;#include using namespace std; class Base public: virtual void Print() = 0; virtual Base() ; class child_1 : public Base public: void Print() cout child_1 Print function endl; child_1() cout child_1 destructor function endl; ; class child_2: public Base public: void Print() cou

8、t child_2 Print function endl; child_2() cout child_2 destructor function Print(); delete p; /记住释放,否则内存泄露 p = new child_2; p-Print(); delete p; p = NULL; return 0; 三 详细描述你所理解的MFC的文档视图架构。MFC文档/视图结构结构被认为是一种架构,应用程序的大部分代码都会被添加在文档和视图中。文档和视图紧密相连,是用户与文档之间的交互窗口;用户通过文档视图结构可实现数据的传输,编辑读取和保存等。但文档,视图,以及应用程序框架的相关

9、部分之间还包括了一系列非常复杂的相互作用。切分窗口和一档多视是文档和视图相互作用的典型实例。文档用于管理应用程序的数据,而视图用于显示文档并管理与用户的交互编写应用程序时,大部分工作都集中在文档类和视图类中。在创建应用程序的框架时,MFc AppWizard创建的文档类从CDocument类派生而来,视图类从CView类为应用程序定义的视图类提供了一些基本功能。视图与文档链接在一起,它在文档与用户之间起中介作用。视图在屏幕上显示文档数据并把用户输入转换成对文档的操作。类库中文档与视图的这种实现方法把数据与数据的所有更改都通过文档类管理,而视图则调用这个接口来访问和更新数据。文档及相关的视图和边

10、框窗口由文档模板创建的,文档模板负责创建并管理某种类型的所有文档。一 文档与视图的相互作用正常情况下,MFC应用程序用一种编程模式使程序中的数据与它的显示型式和用户交互分离开来,这种模式就是“文档视图结构”也就是文档视图架构,文档视图结构可以方便地实现文档和视图的相互作用。如果在用MFC App Wizard创建文档应用程序的第一步选中“文档视图结构支持”复选框,就可使用下列五个文档和视图相互作用的重要成员函数。1. CView:GetDocument函数视图对象只有一个与之相联系的 文档对象,它所包含的GetDocument函数允许应用程序由视图得到与之相关的文档。2. CDocument:

11、UpdateAllview函数如果文档的数据发生了改变,那么所有的视图都必须被通知到,以便它们能够对所显示的数据进行相应的更新。CDocument:UpdateAllview函数就起到这样的作用。 1. CView:OnUpdate函数这是一个虚函数。当应用程序调用了CDocument:UPdateAll3. CView:OnInitialUpdate函数当应用程序被启动时,或当用户从“文件”菜单中选择了“新建”或打开时,该View虚函数都会被自动调用。该函数除了调用无提示参数(lHint=0,pHint=NULL)的OnUpdate函数之外没有其他任何操作4. CDocument:OnNew

12、Document函数在文档应用程序中,当用户从文件菜单中选择新建命令时,框架将首先构造一个文档对象,然后调用该函数。在MFC中,文档视图机制使框架窗口,文档,视图和应用程序对象之间具有一定的联系,通过相应的函数可实现各对象指针的相互调用。1. 从文档类中获取视图对象指针在文档类中有一个与其关联的各视图对象的列表,并可通过 CDocument 类的成员函数GetFirstViewPosition和GetNexView来定位相应的视图对象2. 从视图类中获取文档对象和住框架对象指针在视图类中获取文档对象指针是很容易的,只需调用视图类中的成员函数GetDocument即可。3. 在主框架类中获取视图

13、对象指针对于单文档应用程序来说,只需调用CFramWnd类的GetActiveView成员函数即可。文档/视图结构特点主要有:1将对数据的操作与数据显示界面分离,放在不同类的对象中处理。这种思想使得程序模块的划分更加合理。文档对象只负责数据的管理,不涉及用户界面;视图对象只负责数据输出和与用户的交互,可以不考虑数据的具体组织结构的细节。2MFC在文档/视图结构中提供了许多标准的操作界面,包括新建文件、打开文件、保存文件、文档打印等,大大减轻了程序员的工作量。程序员不必再书写这些标准处理的代码,从而可以把更多的精力放到完成应用程序特定功能的代码上。3支持打印、打印预览和电子邮件发送功能。程序员只

14、需要编写很少的代码甚至根本无需编写代码,就可以为应用程序提供“所见即所得”式的打印和打印预览这类功能。4使用Developer Studio的AppWizard可生成基于文档/视结构的SDI或MDI框架程序,程序员只需在其中添加与特定应用有关的部分代码,就可完成应用程序的开发工作。然而,文档/视图结构也不是万能的。有些不宜采用文档/视图结构:四 选修题面向对象的3大基本特征有封装性、继承性和多态性:完成一个简单的基于MFC对话框的个人通信录系统(界面布局和系统需求自己确定),详细描述你的分析以及实现过程,通讯录的数据以串行化的方法写入文件。(60分)1. 分析过程 完成一个简单的基于MFC对话

15、框的个人通讯录系统。它以对话框的方式弹出界面,记录包括姓名,学号,地址,电话和QQ这些信息,用类CBook1来描述,并使其可序列化。然后将记录保存到一个对象数组集合类对象中,最后通过文档序列化将记录保存到一个文件中。当添加记录或打开文件时,还会将数据显示在文档窗口中(即视图)图1 Ex_Book1运行结果2. 基于MFC对话框的个人通讯录系统的实现过程。1. 添加用于学生记录输入的对话框(1)用MFC AppWizard(exe)创建一个默认的单文档应用程序Ex_Book1.(2) 像应用程序中添加一个对话框资源,打开属性对话框,将其字体设置为“宋体,9号”,标题改为“添加学生记录”,取默认的

16、ID(IDD_DIALOG1),将“OK”和“Cancel”按钮的标题分别改为“确定”和“取消”。(3)参看图1的控件布局,用编辑器为对话框架添加如图表2所示的一些空件。表2 添加的控件控件ID标题属性静态文本默认姓名默认静态文本默认学号默认静态文本默认地址默认静态文本默认电话默认静态文本默认QQ默认编辑框IDC_EDIT1默认编辑框IDC_EDIT2默认编辑框IDC_EDIT3默认编辑框IDC_EDIT4默认编辑框IDC_EDIT5默认(1)双击对话框模板或按【Ctrl+W】快捷键,为对话框资源IDD_DIALOG1创建一个对话框类CInputDlg.(2)打开ClassWizard的Mem

17、ber Variables标签,在Class name中选择CInputDlg,选中所需的控件ID标识符,双击鼠标或单击Add Variables按钮,依次为表3所示的控件增加成员变量。表3 控件变量控件ID变量类型变量名范围和大小IDC_EDIT1CStringm_strName20IDC_EDIT2CStringm_strID20IDC_EDIT3CStringm_strAdr20IDC_EDIT4CStringm_strPhone20IDC_EDIT5CStringm_strQQ20图4 控件变量1. 添加一个CBook1类并使该类可序列话一个可序列列化的类要是CObject的一个派生类

18、,且在类声明中,需要包含DECLARE_SERIAL宏调用,而在类的实现文件中包含IMPLEMENT_SERIAL宏调用,这个宏有3个参数:前两个参数分别表示类名和基类名,第三个参数表示应用程序的版本号。最后还要重载Serialize函数,使该类的数据成员进行相关序列化操作。 由于使用Class Wizard无法添加一个CObject派生类,因此必须手动进行,为了简化类文件的复杂性,这里创建的这个CBook1类的声明和实现代码是直接添加在Ex_Book1Doc.h和Ex_Book1Doc.cpp文件中的,具体代码如下class CBook1:public CObject CString str

19、Name; /姓名 CString strID; /学号 CString strAdr; /地址 CString strPhone; /电话 CString strQQ; /QQ DECLARE_SERIAL(CBook1)public: CBook1() ; CBook1(CString name,CString id,CString adr,CString phone,CString qq); / void Serialize(CArchive &ar); void Display(int y,CDC*pDC); /在坐标为(0,Y)处显示数据;CBook1:CBook1(CString

20、name,CString id,CString adr,CString phone,CString qq) strName=name; strID=id; strAdr=adr; strPhone=phone; strQQ=qq;void CBook1:Display(int y,CDC*pDC) CString str; str.Format(%s %s %s %s %s,strName,strID,strAdr,strPhone,strQQ); pDC-TextOut(0,y,str);IMPLEMENT_SERIAL(CBook1,CObject,1)void CBook1:Serial

21、ize(CArchive &ar) if(ar.IsStoring() arstrNamestrIDstrAdrstrPhonestrNamestrIDstrAdrstrPhonestrQQ;3.添加并处理菜单项(1)在菜单资源的主菜单中增加顶层菜单项“学生记录(&S)”,在该顶层菜单项中增加子菜单“添加(&A)”(ID_BOOK1_ADD)(2)用ClassWizard为CEx_Book1Doc类添加ID_BOOK1_ADD的COMMAND消息映射,并在映射函数添加代码;(3)在Ex_Book1Doc.cpp.h文件的开始处,增加包含CAddDlg的头文件。2. 完善代码(1)在Ex_Boo

22、k1Doc.h文件中,为CEx_Book1Doc类添加下列成员变量和函数;public: CObArray m_booObArray; int GetAllRecNum(); CBook1* GetBookAt(int nIndex);(2)在Ex_Book1Doc.cpp文件中,添加函数的实现代码:CBook1* CEx_Book1Doc:GetBookAt(int nIndex) if(nIndexm_booObArray.GetUpperBound() return 0; /超界处理 return(CBook1*)m_booObArray.GetAt(nIndex);int CEx_Bo

23、ok1Doc:GetAllRecNum() return m_booObArray.GetSize();(3)在CEx_Book1Doc析构函数中添加下列代码:CEx_Book1Doc:CEx_Book1Doc() int nIndex=GetAllRecNum(); while(nIndex-) delete m_booObArray.GetAt(nIndex); m_booObArray.RemoveAll();(4)在Serialize函数中添加下列代码:void CEx_Book1Doc:Serialize(CArchive& ar) if (ar.IsStoring() m_booO

24、bArray.Serialize(ar); else m_booObArray.Serialize(ar); 还有要说的是,m_booObArray是一个对象数组集合类CObArray的对象,当读取数据过程中调用Serialize成员函数时,它实际上是调用集合类对象中元素的Serialize成员函数,并将对象添加到m_booObArray中。当通讯录信息记录后,一旦保存到文件中,就会将CBook1类名同时存到文件中,当读取时,就会自动使用CBook1类这是CObArray序列化的一个内部机制。(5)在CEx_Book1View:OnDraw函数中添加下列代码:void CEx_Book1Vie

25、w:OnDraw(CDC* pDC) CEx_Book1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); int y=0; for (int nIndex=0;nIndexGetAllRecNum();nIndex+) pDoc-GetBookAt(nIndex)-Display(y,pDC); y+=16; (6)打开文档的字串资源IDR_MAINFRAME,将其内容修改为;Ex_Book1RecnEx_Boon记录文件(*.rec)nExBook1.DocumentnEx_Boo Document(7)编译运行并测试,结果如图1所示。二通讯录系统演示如下1.程序主界面如下图5 主界面2.资源框界面如下图5 资源框界面3. 通讯录信息如下图6通讯录信息4. 保存功能如下图7 保存功能5. 打开功能如下图8 打开功能

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2