您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 《VisualC++程序设计》课程考核
《VisualC++程序设计》大作业《VisualC++程序设计》2一.请详细地论述面向对象的封装性和继承性。(1)封装性封装性是保证软件部件具有优良的模块性的基础。向对象的类是封装良好的模块,类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实现)显式地分开,其内部实现按其具体定义的作用域提供保护。对象是封装的最基本单位。封装防止了程序相互依赖性而带来的变动影响。面向对象的封装比传统语言的封装更为清晰、更为有力。(2)继承性向对象语言的一个重要机制,通过继承可以在一个一般类的基础上建立新类。被继承的类称为基类,在基类上建立的新类称为派生类。如果一个类只有一个基类则称为单继承,否则称为多继承。通过类继承,可以使派生类有条件地具有基类的属性,这个条件就是继承方式。继承发端于抽象的层次。在人类认识事物的过程中,抽象是一种重要的方法。概念是一种抽象,对某一事物,通过抽象去掉一些细节,我们就获得了对它的基本特征和行为的一些抽象认识,形成相关的概念。如果在这个基础上再进一步抽象,我们就获得了对同一种事物的更高层次上的抽象认识。这种不同层次上的抽象认识即表达啦不同事物间的联系也表达了它们之间的差异。类继承模拟啦人类的这种思维特点。在软件实现中,继承机制提供了通过再用已有代码定义新类的手段。继承在两个不同的类(或多个类)之间建立了关系,它使一个类(称为父类)的数据结构和操作能够被其他类(称为子类)再用,这样,在子类中只需要定义父类中没有的数据结构和操作即可。继承的另一个有点是表达程序中各个类之间的关系。这使程序不再是毫无关系的类的堆砌,而具有良好的机构。继承提供了一种层次抽象机制,是将类构成特定层次的一种工具。二.请结合例程分别详细的论述什么是面向对象的静态多态和运行时多态多态性是面向对象程序设计的重要特征性之一,它与封装性和继承性构成了面向对象程序设计的三大特征。所谓多态性,是指不同类型的对象接受相同的信息时产生不同的行为。这里的消息主要是指对类的成员函数的调用,而不同的行为是指成员函数的不同实现。在C++中,多态可分为两种;编译时的多态性和运行时的多态性。编译时的多态性是通过函数或运算符的重载来实现的,而运行时的多态性是通过虚函数来实现的,它指在程序执行之《VisualC++程序设计》3前,根据函数和参数还无法确定应该调用哪一个函数,必须在程序的执行过程中,根据具体的执行情况动态地确定。与这两种多态性方式相对应的是两种编译方式:静态联编(也是静态多态)和动态联编(也是动态联编)(1)静态多态使用的是静态联编方式,在编译时函数和函数的实现就关联在一起,主要是通过重载和模实现,在宏多态中,是通过定义变量,编译时直接把变量替换,实现宏多态.#includeiostreamusingnamespacestd;//宏多态;a,b可以不同类型#definesum(a,b)((a)+(b))classBase{public:voidPrint()//不需要定义为虚函数{coutbasePrint()functionsendl;}voidPrint(intval)//重载,根据参数列表不同实现函数多态{coutbasePrint(int)functionsendl;}};classchild:publicBase{public:voidPrint()//不需要定义为虚函数{《VisualC++程序设计》4coutchildPrint()functionsendl;}voidPrint(intval)//重载,根据参数列表不同实现函数多态{coutchildPrint(int)functionsendl;}};templatetypenameTvoidfunc(T&p){p.Print();p.Print(1);}intmain(){Basebase;childch;inta=23,b=19;doublefa=13.32,fb=29.36;func(base);func(ch);coutsum(a,b)endl;coutsum(fa,fb)endl;return0;}(2)动态多态主要通过虚函数实现,父类指针或者引用能够指向子类对象,调用子类的虚函数,所有在编译时是无法确定调用哪个虚函数,每个子类都维护着一张虚函数表,程序执行时查询虚函数表来确定调用哪个虚函数;《VisualC++程序设计》5#includeiostreamusingnamespacestd;classBase{public:virtualvoidPrint()=0;virtual~Base(){}};classchild_1:publicBase{public:voidPrint(){coutchild_1Printfunctionendl;}~child_1(){coutchild_1destructorfunctionendl;}};classchild_2:publicBase{public:voidPrint(){coutchild_2Printfunctionendl;}~child_2(){coutchild_2destructorfunctionendl;}《VisualC++程序设计》6};intmain(){Base*p=newchild_1;//父类指针指向子类对象p-Print();deletep;//记住释放,否则内存泄露p=newchild_2;p-Print();deletep;p=NULL;return0;}三.详细描述你所理解的MFC的文档视图架构。MFC文档/视图结构结构被认为是一种架构,应用程序的大部分代码都会被添加在文档和视图中。文档和视图紧密相连,是用户与文档之间的交互窗口;用户通过文档视图结构可实现数据的传输,编辑读取和保存等。但文档,视图,以及应用程序框架的相关部分之间还包括了一系列非常复杂的相互作用。切分窗口和一档多视是文档和视图相互作用的典型实例。文档用于管理应用程序的数据,而视图用于显示文档并管理与用户的交互编写应用程序时,大部分工作都集中在文档类和视图类中。在创建应用程序的框架时,MFcAppWizard创建的文档类从CDocument类派生而来,视图类从CView类为应用程序定义的视图类提供了一些基本功能。视图与文档链接在一起,它在文档与用户之间起中介作用。视图在屏幕上显示文档数据并把用户输入转换成对文档的操作。类库中文档与视图的这种实现方法把数据与数据的所有更改都通过文档类管理,而视图则调用这个接口来访问和更新数据。文档及相关的视图和边框窗口由文档模板创建的,文档模板负责创建并管理某种类型的所有文档。一文档与视图的相互作用正常情况下,MFC应用程序用一种编程模式使程序中的数据与它的显示型式和用户交互分《VisualC++程序设计》7离开来,这种模式就是“文档视图结构”也就是文档视图架构,文档视图结构可以方便地实现文档和视图的相互作用。如果在用MFCAppWizard创建文档应用程序的第一步选中“文档视图结构支持”复选框,就可使用下列五个文档和视图相互作用的重要成员函数。1.CView::GetDocument函数视图对象只有一个与之相联系的文档对象,它所包含的GetDocument函数允许应用程序由视图得到与之相关的文档。2.CDocument::UpdateAllview函数如果文档的数据发生了改变,那么所有的视图都必须被通知到,以便它们能够对所显示的数据进行相应的更新。CDocument::UpdateAllview函数就起到这样的作用。1.CView::OnUpdate函数这是一个虚函数。当应用程序调用了CDocument::UPdateAll3.CView::OnInitialUpdate函数当应用程序被启动时,或当用户从“文件”菜单中选择了“新建”或打开时,该View虚函数都会被自动调用。该函数除了调用无提示参数(lHint=0,pHint=NULL)的OnUpdate函数之外没有其他任何操作4.CDocument::OnNewDocument函数在文档应用程序中,当用户从文件菜单中选择新建命令时,框架将首先构造一个文档对象,然后调用该函数。在MFC中,文档视图机制使框架窗口,文档,视图和应用程序对象之间具有一定的联系,通过相应的函数可实现各对象指针的相互调用。1.从文档类中获取视图对象指针在文档类中有一个与其关联的各视图对象的列表,并可通过CDocument类的成员函数GetFirstViewPosition和GetNexView来定位相应的视图对象2.从视图类中获取文档对象和住框架对象指针《VisualC++程序设计》8在视图类中获取文档对象指针是很容易的,只需调用视图类中的成员函数GetDocument即可。3.在主框架类中获取视图对象指针对于单文档应用程序来说,只需调用CFramWnd类的GetActiveView成员函数即可。文档/视图结构特点主要有:1.将对数据的操作与数据显示界面分离,放在不同类的对象中处理。这种思想使得程序模块的划分更加合理。文档对象只负责数据的管理,不涉及用户界面;视图对象只负责数据输出和与用户的交互,可以不考虑数据的具体组织结构的细节。2.MFC在文档/视图结构中提供了许多标准的操作界面,包括新建文件、打开文件、保存文件、文档打印等,大大减轻了程序员的工作量。程序员不必再书写这些标准处理的代码,从而可以把更多的精力放到完成应用程序特定功能的代码上。3.支持打印、打印预览和电子邮件发送功能。程序员只需要编写很少的代码甚至根本无需编写代码,就可以为应用程序提供“所见即所得”式的打印和打印预览这类功能。4.使用DeveloperStudio的AppWizard可生成基于文档/视结构的SDI或MDI框架程序,程序员只需在其中添加与特定应用有关的部分代码,就可完成应用程序的开发工作。然而,文档/视图结构也不是万能的。有些不宜采用文档/视图结构:四选修题面向对象的3大基本特征有封装性、继承性和多态性:完成一个简单的基于MFC对话框的个人通信录系统(界面布局和系统需求自己确定),详细描述你的分析以及实现过程,通讯录的数据以串行化的方法写入文件。(60分)1.分析过程完成一个简单的基于MFC对话框的个人通讯录系统。它以对话框的方式弹出界面,记录包括姓名,学号,地址,电话和QQ这些信息,用类CBook1来描述,并使其可序列化。然后将记录保存到一个对象数组集合类对象中,最后通过文档序列化将记录保存到一个文件中。当添加记录或打开文件时,还会将数据显示在文档窗口中(即视图)图1Ex_Book1运行结果2.基于MFC对话框的个人通讯录系统的实现过程。1.添加用于学生记录输入的对话框(1)用MFCAppWizard(exe)创建一个默认的单文档应用程序Ex_Book1.《VisualC++程序设计》9(2)像应用程序中添加一个对话框资源,打开属性对话框,将其字体设置为“宋体,9号”,标题改为“添加学生记录”,取默认的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的MemberVariables标签,在Classname中选择CInputDlg,选中所需的控件ID标识符,双击鼠标或单击AddVariables按钮,依次为表3所示的控件增加成员变量。表3控件变量
本文标题:《VisualC++程序设计》课程考核
链接地址:https://www.777doc.com/doc-2836096 .html