VCMFC试题复习题及答案
- 格式:doc
- 大小:209.50 KB
- 文档页数:36
武汉大学2021—2021学年上学期面向对象程序设计试卷〔B〕学号:姓名:院系:专业:得分:一、名词解释〔每题5分,共计25分〕〔1〕构造函数:是一种特殊成员函数,它提供了对成员变量进展初始化方法,使得在声明对象时能自动初始化对象〔+2〕;构造函数名称与类名一样〔+1〕;构造函数不能指定任何返回值类型〔+1〕;构造函数可以重载〔+1〕。
〔2〕多态:多态性是面向对象编程一个重要特征〔+1〕,主要表现在函数调用时实现“一种接口,多种方法〞〔+2〕。
多态又分为编译时多态和运行时多态两种〔+2〕。
〔3〕抽象类:抽象类是指这样类,它一些行为〔成员函数〕不给出具体定义〔+2〕,抽象类至少带有一个纯虚函数〔+1〕,抽象类不能用来申明对象,只能作为基类使用,因此它又称为抽象基类〔+2〕。
〔4〕文档模板:在文档/视图构造应用程序中,数据以文档类对象形式存在〔+1〕。
文档对象通过视图对象显示出来,而视图大对象又是框架窗口一个子窗口,并且涉及文档操作菜单和工具栏等资源也是建立在框架窗口上〔+2〕。
这样文档、视图、框架和所涉及资源形成了一种固定关系,这种固定关系就成为文档模板〔+1〕。
也就是说,文档模板描述了对应于每一种类型文档视图和窗口类型〔+1〕。
〔5〕序列化:对象保存和恢复过程称为序列化〔+2〕。
即对象具有保存和加载其状态能力〔+1〕,对象能够在程序运行完毕前将对象当前状态写入永久存储体中,以后在程序运行时通过数据读取而恢复对象状态〔+2〕。
二、简答题〔每题10分,共计40分〕1.简述文档、视图和应用程序框架之间如何相互作用?答:文档、视图和应用程序包含了一系列复杂相互作用过程〔+1〕,稳当和视图交互式通过类共有数据成员和成员函数实现〔+1〕。
一个视图对象只与一个文档对象关联,一个文档可以与多个视图关联,但一个文档对象只反映当前视图变化〔+2〕。
视图中用GetDocument()获取文档对象进展操作〔+1〕;在文档中利用Invalidate(), UpdateAllViews()或SendMessage(WM_PAINT,a,b)调用视图中OnDraw()对文档数据进展绘图〔+3〕;在程序任何地方可以调用AfxGetApp()得到程序框架对象指针,利用框架对象指针可进一步利用GetActiveView()获取程序视图对象,并对其进展操作〔+2〕。
一、名词1.面向对象技术:全称Oriented Object Technology, 是以对象为单位描述客观世界的一种新技术,其领域包括OO-PL(程序设计语言)、OO-DB。
2.对象:object,是对现实世界任何实体的抽象描述,包含数据以及对数据的操作。
3.类与类库:类(class)是对一组性质相近的客观对象的抽象归纳,它将对象的共性集中起来,形成一个集合。
类库:类(class)——是一种C++数据类型,它能够提供访问某个“类对象”的接口,这个“类对象”由一个名字来标识。
一个类定义包括类的变量和方法,以及实例的变量和方法,它还包含着它的父类的所有变量和方法。
类库(class library)——支持相同应用程序的相关C++类的集合。
对象(object)——是“类”的实例,它对能够修改类状态的属性(数据)和行为(函数)都作了具体实现。
4.MFC:微软基础类(Microsoft Foundation Classes),类库是一些类的集合,其中封装了大量的有用的函数和数据结构,一个成熟的软件开发工具都有一个功能庞大的类库与他匹配,与Visual C++捆绑在一起的是微软基础类MFC。
5.匈牙利命名法:是匈牙利人查尔斯·西蒙尼提出的。
有两条规则:标识符的名字以一个或者多个小写字母开头,用这些字母来指定数据类型。
在标识符内,前缀以后就是一个或者多个第一个字母大写的单词,这些单词清楚地指出了源代码内那个对象的用途。
如,nCount为一整型变量,bFlag为一Boolean型变量。
基类(base class)——指C++中的一些抽象的、基础性的“大”类,其它类能够通过继承关系由它派生。
派生类(derived class)——由一个基类派生出来的类,它由基类创建,并且继承了该基类的所有特性。
6.类的继承性与派生性:类的派生类:在已有类的基础上定义一个新类,新定义的类称为原有类的派生类或子类,原有的类称为新定义的类的基类或父类,派生类继承了基类所有的属性和行为。
《VC程序设计》试卷1一、单项选择题(每小题1分,共20分)1、假定MyClass为一个类,则执行“” MyClass a[3],*p[2];”语句时,自动调用该类构造函数的次数为( B )A、2B、3C、4D、52、对于类中定义的成员,其隐含访问权限为( B )A、protectedB、privateC、publicD、static3、一个类的友元函数或友元类能够通过成员操作符访问该类的( B )A、私有成员B、所有成员C、公用成员D、保护成员4、下面说法正确的是(A )A、构造函数可以重载,析构函数不能重载。
B、构造函数不能重载,析构函数可以重载。
C、构造函数可以重载,析构函数也可以重载。
D、构造函数和析构函数都不可以重载。
5、下列语句的运行结果为( D )#include <iostream.h>srtuct COMPLEX{int x;int y;} cNum[2]={1,3,2,7};void main(){cout<< cNum[0].y*cNum[1] x<<endl;}A、3B、2C、21D、66、类AB的缺省构造函数和析构函数是( A )A、AB( )和~AB( )B、AB(int)和~AB( )C、AB( )和~AB(delete )D、AB( )和int~AB( )7、在C++中,若对函数未加说明,则函数的隐含类型是( A )A、intB、doubleC、voidD、char8、已知类A是类B的友元,类B是类C的友元,则( D )A、类A一定是类C的友元B、类C一定是类A的友元C、类C的成员函数可以访问类B的对象的任何成员D、类A的成员函数可以访问类B的对象的任何成员9、下列说法中正确的是( B )A、类定义中只能说明函数成员的函数头,不能定义函数体B、类中的函数成员可以在类体中定义,也可以在类体之外定义C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中D、在类体之外定义的函数成员不能操作该类的私有数据成员10、以下不属于成员函数的是( B )A、静态成员函数B、友元函数C、构造函数D、析构函数11、对于消息队列的描述正确的是( D )A、在Windows中只有一个消息系统,即系统消息队列。
复习题::局部全局变量的重名问题。
即在局部变量的作用域内,可用“::”对被隐藏的同名全局变量进行访问。
内联函数:消除函数调用时的系统开销,以提高运行速度,合一些小函数,用空间换时间适。
int i和int& ri = i:表示变量ri引用了变量i,这时ri就可看作是i的别名,即它们指向同一个内存单元。
派生类对基类成员的继承关系:基类成员作为派生类成员公有派生私有派生private成员不可直接访问成员不可直接访问成员protected成员protected成员private成员public成员public成员private成员联编的概念与作用:编译时的多态是通过静态联编来实现的。
所谓联编(binding。
亦称束定),就是把函数名与其函数体的程序代码连接(联系)在一起。
静态联编时,系统用实参与形参进行匹配,对于同名的重载函数便根据参数上的差异进行区分,然后进行联编。
从而实现了多态性。
运行时的多态是用动态联编实现的。
动态联编(也称晚联编)是程序运行时才进行的联编。
即当程序调用到某一函数(过程)名时,才去寻找和连接其程序代码,对面向对象程序而言,就是当对象接收到某一消息时,才去寻找和连接相应的方法。
6、可视化开发系统往往集成了一系列系统可用资源和开发工具,主要是指哪些?程序调试工具,包括源程序语法检查、可执行程序修改和运行监视等;可选择并构成具体语句或源程序结构的例程库及Help;资源管理器,包括图形化窗口及组成元素的多种对象的编辑器;应用程序Help和Setup开发工具包;源程序编辑器和编译器;系统函数库和系统函数开发工具。
窗口管理函数实现窗口的创建、移动和修改功能;系统服务函数:实现与操作系统有关的多种功能;图形设备(GDI)函数:实现与设备无关的图形操作功能。
API为应用程序提供Win系统各种特殊函数及数据结构定义;API是Win系统与Win应用程序间的标准程序接口;Win应用程序可以利用上千个标准API函数调用系统功能。
C++/MFC试题一.填空题 (26 分 )1 . WIN32 平台下, sizeof(short) = __2__ , sizeof(int) = __4__ , s izeof(long) = __4__ 。
(3 分 )2 .请给出如下程序的结果 (2 分 )int a = 3;int b = a << 3;a = __3__ ,b = __24__ 。
3.请给出如下程序的结果 (2 分 )int aaa = 0x01;htonl(aaa) = _16777216___ 。
//这题运行显示的是16777216,我觉得可能是随机值4 .请给出如下程序的结果 (2 分 )#define MAX_NUM 100+200int nTemp = MAX_NUM*10;则 Temp = __2100__ 。
5 .请给出如下程序的结果 (3 分 )char szTemp[1000] = "";int nLen1 = sizeof(szTemp);int nLen2 = strlen(szTemp);strcpy(szTemp, "abc");int nLen3 = sizeof(szTemp);int nLen4 = strlen(szTemp);int nTemp[100];int *pTemp = nTemp;int nLen5 = sizeof(pTemp);char szResult[200] = "";sprintf(szResult, "%d,%d,%d,%d,%02d.", nLen1, nLen2, nLen3, nLen4, nL en5);则 szResult = ____ 。
6 . MFC 中,大部分类是从哪个类继承而来( CCmdTarget 、 CObject 、 CW inApp 、 CWnd )? (2 分 )__CObject __7 .内存是进程范围 or 线程范围; ____CPU 调度时,针对进程 or 线程; ____函数调用堆栈,针对进程 or 线程。
《VC程序设计》试卷1一、单项选择题(每小题1分,共20分)1、假定MyClass为一个类,则执行“” MyClass a[3],*p[2];”语句时,自动调用该类构造函数的次数为(B)A、2B、3C、4D、52、对于类中定义的成员,其隐含访问权限为(B)A、protectedB、privateC、publicD、static3、一个类的友元函数或友元类能够通过成员操作符访问该类的(B)A、私有成员B、所有成员C、公用成员D、保护成员4、下面说法正确的是(A)A、构造函数可以重载,析构函数不能重载。
B、构造函数不能重载,析构函数可以重载。
C、构造函数可以重载,析构函数也可以重载。
D、构造函数和析构函数都不可以重载。
5、下列语句的运行结果为(D)#include <iostream.h>srtuct COMPLEX{int x;int y;} cNum[2]={1,3,2,7};void main(){cout<< cNum[0].y*cNum[1] x<<endl;}A、3B、2C、21D、66、类AB的造缺省构函数和析构函数是( A )A、AB( )和~AB( )B、AB(int)和~AB( )C、AB( )和~AB(delete )D、AB( )和int~AB( )7、在C++中,若对函数未加说明,则函数的隐含类型是(A)A、intB、doubleC、voidD、char8、已知类A是类B的友元,类B是类C的友元,则( D )A、类A一定是类C的友元B、类C一定是类A的友元C、类C的成员函数可以访问类B的对象的任何成员D、类A的成员函数可以访问类B的对象的任何成员9、下列说法中正确的是( B )A、类定义中只能说明函数成员的函数头,不能定义函数体B、类中的函数成员可以在类体中定义,也可以在类体之外定义C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中D、在类体之外定义的函数成员不能操作该类的私有数据成员10、以下不属于成员函数的是( B)A、静态成员函数B、友元函数C、构造函数D、析构函数11、对于消息队列的描述正确的是(D)A、在Windows中只有一个消息系统,即系统消息队列。
一、填空题1、如果基类有带参数的构造函数,则派生类需采用方式实现对基类成员的初始化。
2、在C++中,编译时的多态是通过或来实现的。
3、在派生类中对虚函数进行重新定义时,要保证名称、和必须与基类中的虚函数一致。
4、当以保护方式继承时,基类中的公有成员成为派生类的成员。
5、含有纯虚函数的类称为。
6、Windows的位图有两种类型分别为:位图和位图。
7、对话框有两种类型分别是:和。
8、在Windows程序设计中,通过MFC提供的可以实现图形、位图和文字的绘制。
9、MFC应用程序框架包括三类:单文档、和的应用程序。
10、与DOS程序不同,Windows程序是通过操作系统发送的来处理用户输入的。
11、如果基类有带参数的构造函数,则派生类需采用方式实现对基类成员的初始化。
12、含有纯虚函数的类称为。
13、对话框有两种类型分别是:和。
14、定义一个运算符重载函数时,函数名必须以开头。
二、选择题1、在任何继承方式下,派生类的自有成员函数都不能访问原基类的某些成员,这些成员的原访问属性必然是_________。
A)公有或保护B)保护或私有C)私有或继承的私有D)继承的私有或公有2、运行时的多态是通过基类中的虚函数实现的,虚函数可以是。
A)普通成员函数B)有元函数C)静态成员函数D)以上都可以3、下列运算符中,不能重载的运算符是。
A):: B)[ ] C)&&D)>>4、当用户按下鼠标左键时,系统会发送消息。
A)WM_LBUTTONDOWN B)WM_COMMANDC)WM_LBUTTONUP D)WM_RBUTTONDBLCLK5、下列关于无模式对话框的说法中,正确的是A)在退出对话框之前,对话框所在的应用程序不能继续执行B)对话框弹出后,可以执行所在应用程序的其他操作C)通过函数DoModal()进行创建、显示和关闭D)不能通过Create()函数实现无模式对话框的创建6、下列关于菜单叙述错误的是。
1-1 什么是Windows SDK程序?答:使用软件开发工具包开发出来的Windows应用程序叫做Windows SDK程序。
1-3 打开windows.h文件,看一下Windows系统的句柄是什么数据类型的?答:整型。
1-5 什么是事件?答:能触发程序做出相应反应的因素或动作叫做“事件”。
1-6 如何显示和更新窗口?答:调用函数ShowWindow显示窗口,调用函数UpdateWindows更新窗口。
1-7 什么是消息循环?答:在创建了窗口的应用程序中,应用程序将不断地从消息队列中获取消息,并将消息指派给指定的窗口处理函数来处理,然后再回来从消息队列获取消息,这个不断重复的工作过程叫做消息循环。
1-9 说明Windows应用程序的主函数、窗口函数与Windows系统之间的关系。
答:Windows应用程序的主函数和窗口函数都是系统调用的函数,主函数是在应用程序启动时由系统首先调用的函数,而窗口函数是主函数在消息循环中获得消息并把消息派送给系统之后,由系统调用的用来处理消息的函数。
2-1 在窗体类CframeWnd中需要封装哪些成员?答:在窗体类CframeWnd中要封装窗口句柄、窗口类的定义、注册窗口类、创建窗口、显示更新窗口。
2-2 应用程序类CwinApp应该具备那些主要功能?答:创建、显示应用程序的窗口和建立消息循环。
2-3 在MFC程序设计中,如果要建立拥有自己风格的主窗口,应该重写什么函数。
答:继承CWinAPP类并需要重写该类的成员函数InitInstaance。
3-3 简述构成文档/视图结构应用程序框架的四个MFC派生类,并说出它们的功能。
答:假如工程名称为MyPrj则MFC AppWizard会自动创建一下四个派生类来构成应用程序的框架。
.CFrame类的派生类CMainFrame;.CWinApp类的派生类CMyPrjApp;.CDocument类的派生类CMyPrjDoc;.CView类的派生类CMyPrjView。
实用软件技术复习题1 在用API编写Windows程序时,要有一个入口函数,它的函数名和功能是什么?答:在Windows编程中这个入口函数就是WinMain()。
WinMain函数主要用于初始化程序,显示主窗口,并进入一个消息循环。
2 在Windows程序的入口函数WinMain()中有一个消息循环,代码如下:while (GetMessage(&msg)){TranslateMessage(&msg);DispatchMessage(&msg);}上述代码中个函数作用是什么?答:通过GetMessage函数从线程的消息队列中取出消息,用TranslateMessage函数将消息解释后,再调用DispatchMessage将该消息分发至相应的窗口过程(WndProc)进行处理。
3 Windows程序中有一个窗口函数,该函数的作用是什么?答:每一个窗口都应该有一个“窗口函数”(window procedure,或称window function)。
如果窗口获得一个消息,则这个窗口函数必须判断消息的类别,决定处理的方式。
4 在Windows系统中分别定义了两个数据类型用来表示应用程序对象的句柄及窗口对象的句柄,这两个数据类型是什么?答:应用程序:数据类型HINSTANCE,也常把HINSTANCE的变量命名为hInstance,窗口:数据类型为HWND(也写成HWindow或HWND)。
5 利用AppWizard生成的多文档应用程序包括哪几个主要的类?答:主要是CWinApp, CDocument, CView, CFrameWnd派生,另外再加上CDocTemplate, 这5个类构成了大部分MFC应用程序的核心,6 MFC类库可分为哪两部分?答:MFC类库可以分为两部分,一部分是MFC类,另一部分是全局函数(变量)和宏。
7 MFC中下列类的类名分别是什么?应用程序类(CWinApp)、视图类(CView)、文档类(CDocument)、窗口类(CWnd)、主框架窗口类(CFrameWnd)、文档模板类(CDocTemplate)、对话框类(CDialog)、异常类(CException)、字符串类(CString)、菜单类(CMenu)、工具栏类(CToolBar)、状态栏类(CStatusBar)、静态控件类(CStatic)、按钮控件类(CButton)、编辑控件类(CEdit)、列表框控件类(CCListBox)、组合框控件类(CComboBox)、滚动条控件类(CScrollBar)。
MFC 期末复习及答案1 简述MFC 应用程序的执行过程。
2 简述文档/视图与其他类对象的关系。
3 简述MFC 消息映射机制。
4 消息WM_LBUTTONDOWN 的消息映射宏和消息处理函数是什么?5 如何自定义消息?如何发送自定义消息?6 GDI 创建哪几种类型的图形输出?7 什么是设备环境?它的主要功能有哪些?8 什么是GDI,它有什么功能?MFC 将GDI 函数封装在哪个类中?9 请叙述设备无关性的含义,实现设备无关性需要哪几个环节?10 MFC 提供了哪几种设备环境类?它们各自有什么用途?11 简述传统的SDK 获取设备环境的方法。
12 简述创建和使用自定义画笔的步骤。
13 简述采用MFC 方法编程时,显示一个DDB 位图的步骤。
14 简述菜单设计的主要步骤。
15 为应用程序创建快捷菜单主要有哪些方法?16 如何动态创建菜单?17 创建工具栏的基本步骤有哪些?18 简述MFC 创建状态栏所做的工作。
19 简述创建和使用模态对话框的主要步骤。
20 如何向对话框模板资源添加控件?如何添加与控件关联的成员变量?21 什么是DDX 和DDV?编程时如何使用MFC 提供的DDX 功能?22 简述创建属性页对话框的主要步骤。
23 在应用程序中访问控件的方法有哪些?24 单选按钮控件如何成组?25 组合框与列表框相比有什么不同?如何给组合框添加初始的列表项?26 通过哪几个主要成员函数完成文档与视图之间的相互作用?并简述这些成员函数的功能。
27 简述文档序列化与一般文件处理的区别。
28.如何让用户定义的类支持序列化?1 简述MFC 应用程序的执行过程。
MFC 应用程序启动时,首先创建应用程序对象theApp。
这时将自动调用应用程序类的构造函数初始化对象theApp,然后由应用程序框架调用MFC 提供的WinMain( )主函数。
在WinMain( )主函数中,首先通过调用全局函数GetApp( )来获取theApp 的指针pApp,然后通过该指针调用theApp 的成员函数InitInstance( )来初始化应用程序。
《VC程序设计》试卷1一、单项选择题(每小题1分,共20分)1、假定MyClass为一个类,则执行“” MyClass a[3],*p[2];”语句时,自动调用该类构造函数的次数为( B )A、2B、3C、4D、52、对于类中定义的成员,其隐含访问权限为( B )A、protectedB、privateC、publicD、static3、一个类的友元函数或友元类能够通过成员操作符访问该类的( B )A、私有成员B、所有成员C、公用成员D、保护成员4、下面说法正确的是(A )A、构造函数可以重载,析构函数不能重载。
B、构造函数不能重载,析构函数可以重载。
C、构造函数可以重载,析构函数也可以重载。
D、构造函数和析构函数都不可以重载。
5、下列语句的运行结果为( D )#include <iostream.h>srtuct COMPLEX{int x;int y;} cNum[2]={1,3,2,7};void main(){cout<< cNum[0].y*cNum[1] x<<endl;}A、3B、2C、21D、66、类AB的缺省构造函数和析构函数是( A )A、AB( )和~AB( )B、AB(int)和~AB( )C、AB( )和~AB(delete )D、AB( )和int~AB( )7、在C++中,若对函数未加说明,则函数的隐含类型是( A )A、intB、doubleC、voidD、char8、已知类A是类B的友元,类B是类C的友元,则( D )A、类A一定是类C的友元B、类C一定是类A的友元C、类C的成员函数可以访问类B的对象的任何成员D、类A的成员函数可以访问类B的对象的任何成员9、下列说法中正确的是( B )A、类定义中只能说明函数成员的函数头,不能定义函数体B、类中的函数成员可以在类体中定义,也可以在类体之外定义C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中D、在类体之外定义的函数成员不能操作该类的私有数据成员10、以下不属于成员函数的是( B )A、静态成员函数B、友元函数C、构造函数D、析构函数11、对于消息队列的描述正确的是( D )A、在Windows中只有一个消息系统,即系统消息队列。
MFC习题答案在回答MFC习题之前,我们先简要介绍一下MFC(Microsoft Foundation Classes)是什么。
MFC是微软基于Windows操作系统的应用程序开发框架。
它提供了一套封装的类和函数,用于开发Windows 应用程序界面。
MFC使用了面向对象的编程思想,让开发者更容易地创建功能丰富、交互性强的Windows应用程序。
以下是一些常见的MFC习题及其答案:1. 什么是MFC?答:MFC是微软提供的一套用于开发Windows应用程序的软件开发工具包,通过封装了一些常用的类和函数,简化了Windows应用程序的开发过程。
2. MFC的特点有哪些?答:MFC具有如下特点:- 提供了一套完整的类和函数库,简化了Windows应用程序的开发。
- 使用了面向对象的编程思想,提供了封装、继承、多态等特性。
- 支持GUI界面的开发,提供了丰富的控件和界面设计工具。
- 高度集成化,与Windows操作系统密切结合。
- 提供了丰富的文档和示例代码。
3. MFC中常用的类有哪些?答:MFC中包含了大量的类,常用的类包括:- CWinApp:应用程序类,代表一个MFC应用程序的实例。
- CWnd:窗口类,代表一个窗口对象。
- CFrameWnd:框架窗口类,提供了窗口的框架结构。
- CView:视图类,负责处理窗口的绘制和交互事件。
- CDocument:文档类,负责管理应用程序的数据。
- CDialog:对话框类,用于创建模态或非模态对话框。
- CButton、CEdit、CListCtrl等:常用的控件类。
4. 如何创建一个MFC应用程序?答:可以通过以下步骤创建一个MFC应用程序:1) 打开Visual Studio开发环境,选择创建一个新的项目。
2) 在项目向导中选择MFC应用程序,填写项目名称和位置。
3) 设置应用程序的属性,如窗口样式、文件关联等。
4) 在资源视图中创建所需的对话框、控件等。
Visual C++程序设计-期末试题及答案一、选择题(每题1分,共5分)1 MFC主要由()组成。
A.基础类库、全局函数 B. 基础类库、全局变量、宏C.基础类库、全局函数、宏D.基础类库全局函数全局变量和宏2 应用程序对象CProgramApp是程序执行的最重要部分,( )均由其完成。
A.程序的初始化、运行和结束工作 B。
消息的发送和执行 C.程序的框架、窗口 D。
事件的发生与处理3 当消息产生时,系统调用CWinApp的()函数对消息进行解析,并发送到相应的窗口进行处理。
A.Run B Create C TranslateMessage D DispatchMessage 4 对于在屏幕上的绘制,通常使用()对象,而对于打印机设备上下文,则使用()对象来完成。
A.CDC,CWindowsDC B。
CWindowsDC, CDC C.CWindowsDC,CPaintDC D。
CDC,CPaintDC5 ( )对象表示一个点的位置,()对象表示相对的距离的尺寸,()对象表示一个矩形区域。
A.CPoint类,CRect类,CSize类 B。
CSize类,CPoint 类,CRect类C.CRect类,CSize类,CPoint类 D。
CPoint类,CSize类,CRect类二、填空题(每空1分,共20分)1 消息是应用程序初始化时,Windows发送给视图的第一条消息。
2 用于定时向应用程序发送消息,使程序动作在指定的时间间隔周期性执行。
3 对话框是由一个特殊的、可以接收消息的,它具有的基本特性。
4 对话框主要由两部分组成:和。
5 Visual C++ 6.0集成开发环境中提供的资源有、、、、、和等。
6 CGdiObject及其派生类封装了Windows提供的绘图工具有,,和等。
7 文档是数据的载体,管理及维护数据,支持并实现数据的操作。
视图是数据的表现,视图实现了数据的,并对数据的提供了支持。
一.不定项选择(20题,每题3分,共60分)1.下列说法错误的有()A.数组是一种对象B.数组属于一种原生类C.int number=[]={31,23,33,43,35,63}D.数组的大小可以任意改变2. 不能用来修饰interface的有()A.private B.public C.protected D.static3. 下列说法错误的有()A.在类方法中可用this来调用本类的类方法B.在类方法中调用本类的类方法时可直接调用C.在类方法中只能调用本类中的类方法D.在类方法中绝对不能调用实例方法4.下列说法错误的有()A.能被java.exe成功运行的java class文件必须有main()方法B.JAVASDK就是Java APIC.Appletviewer.exe可利用jar选项运行.jar文件D.能被Appletviewer成功运行的java class文件必须有main()方法5.下列说法错误的有()A.Java面向对象语言容许单独的过程与函数存在B.Java面向对象语言容许单独的方法存在C.Java语言中的方法属于类中的成员(member)D.Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同6. 执行如下程序代码a=0;c=0;do{--c;a=a-1;}while(a>0);后,C的值是()A.0 B.1 C.-1 D.死循环7. 下面哪个是正确的类声明?假设每一段文本都做为一个名称为Fred.java 的文件的全部内容?( )a).public class Fred{public int x = 0;public Fred (int x){this.x=x;}}b).public class fred{public int x = 0;public Fred (int x){this.x=x;}}c).public class Fred extends MyBaseClass, MyOtherBaseClass{ public int x = 0;public Fred(int xval){x=xval;}}d).protected class Fred{private int x = 0;private Fred (int xval){x=xval;}}a) B. b) C. c) D. d)8. 现有下列代码片断:switch(x){case 1: System.out.println("Test 1");break;case 2:case 3: System.out.println("Test 2");break;default: System.out.println("end");}X为何值时将输出"Test 2" ( )A. 1或2B. 1或2或3C. 2或3D. 3E. default9. "|DF|A".split("|").length的结果是( )A 2B 3C 5D 610.以下哪个为真 ( )Interger a = new Interger(9);Interger b = new Interger(9);Long c = New Long(9);A. a==bB. b==cC. a.equals(b)D. b.equals(new Interger(9))11. 下面哪些运算符不能被重载?()A. 做用域运算符“::”B. 对象成员运算符“.”C. 指针成员运算符“->”D. 三目运算符“? :”12. 下面哪些是句柄(HANDLE)?()A. HINSTANCE 实例句柄B. HWND 窗口句柄C. HDC 设备描述符号句柄D. HFONT 字体句柄13. 下面哪些不是OpenGL标准几何元素的绘制模式?()A. GL_FOGB. GL_LINE_STRIPC. GL_POINTSD. GL_TRIANGLE_FAN14. 下面四个选项中,哪一个不是WinMain函数的参数?()A. HINSTANCEB. INTC. LPSTRD. WPARAM15. 现在最快且最通用的排序算法是什么?()A. 快速排序B. 冒泡排序C. 选择排序D. 外部排序16. 从数据库读取记录,你可能用到的方法有:( )A. ExecuteNonQueryB. ExecuteScalarC. FillD. ExecuteReader17. 您要创建一个显示公司员工列表的应用程序。
一、选择题2、VC中存在几种系统定义的消息分类,不同的前缀符号经常用于消息宏识别消息附属的分类,表示按钮控制消息(A)A、BMB、CBC、DMD、EM3、Windows应用程序常用消息,产生单击鼠标左键的消息是(A)A WM_LBUTTONDOWNB WM_RBUTTONUPC WM_RBUTTONDBLCLKD WM_LBUTTONUP4、Windows应用程序常用消息,按下一个非系统键时产生的消息是(B)A WM_RBUTTONUPB WM_KEYDOWNC WM_KEYUPD WM_POPDOWN5、按下一个非系统键时产生的消息WM_ CHAR,存按键的ASCII码信息的是(C)A、1ParamB、WordParamC、wParam D 、ongParam6、关闭窗口时产生的消息(D)A、WM_KEYDOWNB、WM_CREATC、WM_DESTROYD、WM_CLOSE7、由CreateWindow函数发出的消息(B)A、WM_KEYDOWNB、WM_CREATC、WM_DESTROYD、WM_CLOSE由PostQuitMessage函数发出的消息(A)A、WM_QUITB、WM_CREATC、WM_DESTROYD、WM_CLOSE12、在VC中调用函数(A)可以创建自定义字体A、GreateFontB、GreateWFontC、GreateWFontsD、GreateFonts13、输出文本之前要获取字体的信息,如字符高度等,以确定输出格式和下一行字符的位置,获取当前使用字体信息函数(C)A、GetFontMetricsB、GetFontMetricC、GetTextMetricsD、GetTextMetric14、文本输出函数TextOut(HDC hdc, int X, int Y,LPCTSTR lpstring, int nCount )第四个参数nCount记录的是AA、lpstring中的字符串的字节数B、字符串的长度C、lpstring的长度D、lpstring串的循环次数15、虚拟码是一种与设备无关的键盘编码,它的值存放在键盘消息的( A )参数中A、wParam C、VKB、Param D、VB16、Alt键与相关输入键的组合产生的消息是( A )A、系统按键消息B、非系统按键消息C、空消息D、组合消息17、不使用Alt键组合的的按键消息是( B )A、系统按键消息B、非系统按键消息C、空消息D、组合消息18、一个按键的组合产生了一个可以显示的字符时,就产生了一个( A )A、字符消息B、按键消息C、组合消息D、空消息19、按键消息的变量lParam是( C )变量A 、8位 B、16位 C、32位 D、84位20、在Windows操作系统中预定义了几种光标,IDC-ARROW表示:CA、十字光标B、计时光标C、箭头光标D、I光标21、在Windows操作系统中预定义了几种光标,IDC-SIZEALL表示:CA、十字光标B、计时光标C、十字箭头光标D、I光标22、自定义光标保存在扩展名为( B )的文件中A、txtB、curC、 cuvD、 cui23、鼠标消息中lParam包含的是(B)A、鼠标的键值B、鼠标位置C、虚键状态D、字符码24、POPUP语句定义的是(C)A、主菜单条B、下拉式菜单C、弹出式菜单D、菜单项25、资源描述文件中ACCELERATORS定义的是:DA、菜单B、弹出式菜单C、组合键D、加速键资源26、定义位图的数据结构是(D)A、BITMAPB、CBITMAPC、JPGD、HBITMAP27、资源描述文件中DIALOG定义的是:CA、菜单B、弹出式菜单C、对话框资源D、加速键资源28、图标资源的文件扩展名为.A、curB、cuvC、icoD、icc29、MFC库中的类中根类为DA、CWndB、CMDC、InternetD、CObject30、在MFC中以(C)为前缀的函数(数据库类函数和DDX函数除外)和变量,在目前的版本中,都表示全局函数或全局变量A、AFXB、CDC、AfxD、MFC31、Afx为前缀的函数(数据库类函数和DDX函数除外)和变量中,表示无条件终止一个应用程序的是( A )A、AfxAbortB、AfxBeginThreadC、AfxFormatStringD、AfxMessageBox32、Afx为前缀的函数(数据库类函数和DDX函数除外)和变量中,表示显示一个Windows消息框是( D)A、AfxAbortB、AfxBeginThreadC、AfxFormatStringD、AfxMessageBox33、在MFC中表示窗口类的是(D)A、CDialog类B、CMenu类C、CView类D、CWnd类二、填空题1.vc++6.0工程文件的扩展名是________.dsp_______________。
《VC程序设计》试卷1一、单项选择题(每小题1分,共20分)1、假定MyClass为一个类,则执行“” MyClass a[3],*p[2];”语句时,自动调用该类构造函数地次数为( B )A、2B、3C、4D、52、对于类中定义地成员,其隐含访问权限为( B )A、protectedB、privateC、publicD、static3、一个类地友元函数或友元类能够通过成员操作符访问该类地( B )A、私有成员B、所有成员C、公用成员D、保护成员4、下面说法正确地是(A )A、构造函数可以重载,析构函数不能重载.B、构造函数不能重载,析构函数可以重载.C、构造函数可以重载,析构函数也可以重载.D、构造函数和析构函数都不可以重载.5、下列语句地运行结果为( D )#include <iostream.h>srtuct COMPLEX{int x;int y;} cNum[2]={1,3,2,7};void main(){cout<< cNum[0].y*cNum[1] x<<endl;}A、3B、2C、21D、66、类AB地缺省构造函数和析构函数是( A )A、AB( )和~AB( )B、AB(int)和~AB( )C、AB( )和~AB(delete )D、AB( )和int~AB( )7、在C++中,若对函数未加说明,则函数地隐含类型是( A )A、intB、doubleC、voidD、char8、已知类A是类B地友元,类B是类C地友元,则( D )A、类A一定是类C地友元B、类C一定是类A地友元C、类C地成员函数可以访问类B地对象地任何成员D、类A地成员函数可以访问类B地对象地任何成员9、下列说法中正确地是( B )A、类定义中只能说明函数成员地函数头,不能定义函数体B、类中地函数成员可以在类体中定义,也可以在类体之外定义C、类中地函数成员在类体之外定义时必须要与类声明在同一文件中D、在类体之外定义地函数成员不能操作该类地私有数据成员10、以下不属于成员函数地是( B )A、静态成员函数B、友元函数C、构造函数D、析构函数11、对于消息队列地描述正确地是( D )A、在Windows中只有一个消息系统,即系统消息队列.消息队列是一个系统定义地数据结构,用于临时存储消息.B、系统可从消息队列将信息直接发给窗口.另外,每个正在Windows下运行地应用程序都有自己地消息队列.C、系统消息队列中地每个消息最终都要被USER模块传送到应用程序地消息队列中去.应用程序地消息对列中存储了程序地所有窗口地全部消息.D、以上都正确12、一个视图对象能连接( A )文档对象,一个文档对象能连接()视图对象.A、一个,多个B、多个,一个C、一个,一个D、多个,多个13、MFC类库中地类按层次关系可知,CStatic 地直接父类为( B )A、CObjectB、CWndC、CcmdTargetD、CFrameWnd14、可以利用控件地( C )属性和Tab键顺序来为控件分组.A、IDB、Tab stopC、GroupD、Caption15、根据对话框地行为性质,对话框可以分为两类:( B )A、对话框资源和对话框类B、模式对话框和非模式对话框C、对话框资源和对话框模板D、消息对话框和模式对话框16、以下控件中,( C )没有Caption属性.A、按钮B、群组框C、编辑控件D、静态控件17、菜单项助记符前用( B )引导.A、%B、&C、#D、$18、更新菜单状态地消息是( C ).A、WM_COMMANDB、UPDATEC、ON_UPDATE_COMMAND_UID、INV ALIDATE19、关于工具栏、菜单和加速键地关系,正确地说法是( C ).A、工具按钮与菜单必须一一对应B、工具按钮与加速键一一对应C、工具按钮不必与菜单一一对应D、菜单与加速键一一对应20、使用GetWindowDC( )和GetDC( )获取地设备上下文在退出时,必须调用( A )释放设备上下文.A、ReleaseDC( )B、delete( )C、DeleteDC( )D、Detach( )二、填空题(每空1分,共25分)1、VC++开发环境中,int型数据占4个字节,short int占____2___个字节,long int 占_____4____个字节.2、若for循环地“头”为“for(int i=1;i<10;i++)”,并且在循环体中不会修改i地值,则循环体将被重复执行_______9_____次后结束.3、两个函数地函数名____相同____,但参数地个数或对应参数地类型___不同____时,则称为重载函数.4、若ch为char型变量,n为int型变量,则下列语句ch = ’a’; n = 3; ch = ch + n;cout<<” ch = ”<< ch;执行地结果是___ch=d_______.5、C++中函数地参数传递一种是按值传递,另一种是地址传递或___引用__传递.6、C++运行时地多态性通过____虚函数____来实现,而编译时地多态性通过__函数重载___来实现.7 只读成员函数用____const____关键字标识,内联成员函数用___inline____关键字标识.8、class test{public:static int x;};test t1,t2; t1.x = 25;程序运行到这里时,t2.x地值为_____25_______.9、所有地文档类都派生于______CDocument__ _______,所有地视图类都派生于:______ CView _______.10、为解决多继承中因公共基类而产生地二义性问题,C++语言提供了_虚基类___机制.将公共基类声明为它以后,它在派生类中只产生一个实例.11、在代码中,使用CWnd::____UpdateData________函数可实现控件与其成员变量之间地数据地传输.12、列表框ClistBox类地成员函数______AddString________用来向列表框增加列表项,成员函数_____ResetContent_______用来清除列表项所有项目.13、:________序列化_________ 是指将对象写入永久存储介质或者将对象从永久存储介质中读出地过程.14、Windows程序中地消息有窗口消息、命令消息和__控件通知__消息三种类型.15、MFC中地集合类包括数组、列表(链表)、映射(顺序可变).16、在进行绘图时,画刷用于指定图形地填充样式,___画笔______用于指定图形地边框样式.三选择填空题(每空1分,共15分)1、如果在基类和派生类中都包含其他类地对象(即有对象成员),则在创建派生类地对象时,首先执行⑴A地构造函数,接着执行⑵C 地构造函数,然后执行__ _⑶_B__地构造函数,最后才执行⑷ D 地构造函数.A、基类地对象成员B、派生类地对象成员C、基类D、派生类2、[5] B 代表窗口客户区地显示设备上下文, [6]C 代表整个窗口地显示设备上下文.A、CPaintDCB、CClientDCC、CWindowDCD、CMetaFileDC3、消息循环地处理过程如下:⑺ A 函数不断侦察应用程序地消息队列,若队列为空,该函数一直运行,不返回;一旦发现队列不为空,便取出一条消息,把它拷贝到msg结构变量中,同时该函数返回TRUE;得到消息msg后,⑻ B 把来自键盘地命令翻译成WM_XXX消息命令形式. ⑼ E 函数通知Windows把每个消息分发给相应地窗口函数.应用程序并不直接调用窗口函数,而由Windows根据消息去调用窗口函数,因此,窗口函数经常被称为回调函数.A、GetMessage( )B、translateMessage( )C、PostMessage( )D、SendMessage( )E、DispatchMessage( )4、常用地CButton类地成员函数中:⑽ A 获得一个按钮控件地选中、选择和聚焦状态;⑾ D 得到一个按钮地选中状态;⑿ C 设置一个按钮地选中状态.A、GetState( )B、SetState( )C、SetCheck( )D、GetCheck( )E、GetButtonStyle( )5、滚动条类CScrollBar地成员函数规定了滚动条地操作.设置滚动条地范围使用⒀ C 函数,设置滚动块地位置使用⒁E 函数,获取滚动块地当前位置使用⒂ F 函数.A、SetPosB、SetRangeC、SetScrollRangeD、GetPosE、SetScrollPosF、GetScrollPosG、GetScrollRange四写出下列程序地运行结果(每小题5分,共15分)1、.#include<iostream.h>class A{int *a;public:A(int x){ a=new int(x); cout<<"*a="<<*a<<endl; delete a; } };void main(){A x(3), *p;p=new A (5);delete p;}*a=3*a=52、class test{private:int num;public:test();int GetNum() { return num;}~test();};test::test(){ num=0; }test::~test(){ cout<<″Destructor is active″<<endl; } void main(){ test x[3];cout<<″Exiting main″<<endl;}Exiting mainDestructor is activeDestructor is activeDestructor is active3、 #include<iostream.h>class A {public:virtual void fun(){ cout<<"I'm class A"<<endl; } };class B: public A{public:void fun(){ cout<<"I'm class B"<<endl; } };class C: public B{public:void fun(){ cout<<"I'm class C"<<endl; } };void main(){A a,*pA=&a;pA->fun();B b;pA=&b;pA->fun();C c;a=c;a.fun();A &aRef=c;aRef.fun();}I'm class AI'm class BI'm class AI'm class C五、完成程序题(本大题共3小题,每空2分,共12分).根据题目要求,完成程序填空.1、在下面程序地横线处填上适当字句,使该程序执行结果为6.#include <iostream.h>class base{int X;public:____innit(int a){X=a;}_[1]___//为X置值__int GetNum(){return X;}_[2]__//取X值};void main(){base test;test.init(6);cout<<test.GetNum();}2、一个类地头文件如下所示,主程序中产生对象T,且T.num=10,并使用Print()函数输出这个对象地值.class test{private:int num;public:test(int);void Print();};test::test(int n){ num=n; }void test::Print(){ cout<<num<<endl; }#include<iostream.h>void main(){ __[3]_test T(10)__;__[4]__T.print()_;}3、在下面横线处填上适当字句,完成类中成员函数地定义.class A{int * a;public:A(int x=0) {a=_ [5]_ new int(x)____;//用x初始化a所指向地动态对象}~A(){__ [6] delete a;_ _;}//释放动态存储空间};六、程序设计题(1题4 分,2题9 分,共13分)1、简单地计算程序界面如下图所示,操作数1对应编辑框控件地ID为IDC_EDIT1,对应值类型地成员变量m_op1(int);操作数2对应编辑框控件地ID 为IDC_EDIT2,对应值类型地成员变量m_op2(int);计算结果对应地编辑框控件地ID 为IDC_EDIT3,对应值类型地成员变量m_result(int). 假设输入地数为整数,加法按钮地功能是将两操作数相加,并将结果在对应地编辑框IDC_EDIT3显示出来.写出加法按钮对应地代码.void CExDlg::OnButton1(){UpdateDate(TRUE);m_result = m_op1 + m_op2;UpdateDate(FALSE);}void CExDlg::OnButton2(){UpdateDate(TRUE);m_result = m_op1 - m_op2;UpdateDate(FALSE);}2、为学员信息设计一个类CStudent,包含:学号、姓名、出生日期、家庭住址、班级,并使该类可以实现串行化.请写出可以实现要求地CStudent.h和CStudent.cpp文件地内容//CStudent.hclass CStudent :public CObject { 1分public:CString Num;CString Name;CTime Birth;CString Address;CString Grade; 2分DECLARE_SERIAL(CStudent) // 使对象可串行化1分virtual void Serialize( CArchive & ar ); //重载串行化函数1分};CStudent.cppIMPLEMENT_SERIAL(CStudent ,CObject, 0) 1分void CStudent:Serialize(CArchive & ar){ CObject::Serialize(ar); 1分if ( ar.IsStoring() ){ ar<<Num<<Name<< Birth <<Address<<Grade; 1分}else{ ar>>Num>>Name>> Birth >>Address>>Grade; 1分}}《VC++程序设计》试卷2一、单项选择题(每小题1分,共20分)1、假定AB为一个类,则执行“AB a(4),b(3),*p[2];”语句时,自动调用该类构造函数地次数为( A )A、2B、3C、4D、52、对于结构中定义地成员,其隐含访问权限为(C)A、protectedB、privateC、publicD、static3、在面向对象编程中,对象地抽象集合称为( C ).A、对象B、集合C、类D、实例4、下面说法正确地是( A )A、构造函数可以重载,析构函数不能重载.B、构造函数不能重载,析构函数可以重载.C、构造函数可以重载,析构函数也可以重载.D、构造函数和析构函数都不可以重载.5、实现运行时地多态性,必须通过( A )来完成.A、虚函数B、重载函数C、构造函数D、析构函数6、类CNum地缺省构造函数和析构函数是( A )A、CNum ( )和~CNum ( )B、CNum (int)和~CNum( )C、CNum ( )和~CNum (delete )D、CNum ( )和int~CNum ( )7、在类外定义类地成员函数时,应当使用( B )来标识该函数为特定类地成员.A、:B、::C、->D、this8、已知类A是类B地友元,类B是类C地友元,则( D )A、类A一定是类C地友元B、类C一定是类A地友元C、类C地成员函数可以访问类B地对象地任何成员D、类A地成员函数可以访问类B地对象地任何成员9、下面( A )是函数重载.A、void play(int) 和void play(float)B、play( ) 和~play()C、void play(int) 和int play(int)D、void play( ) 和int play( )10、下列说法中正确地是( B )A.类定义中只能说明函数成员地函数头,不能定义函数体.B.类中地函数成员可以在类体中定义,也可以在类体之外定义.C.类中地函数成员在类体之外定义时必须要与类声明在同一文件中.D.在类体之外定义地函数成员不能操作该类地私有数据成员.11、Windows操作系统主要基本内核元件中,_______支持与操作系统密切相关地功能:如进程加载、文本切换、文件I/O以及内存管理、线程管理等.( B )A、GDIB、KERNELC、USERD、以上都不是.12、一个视图对象能连接()文档对象,一个文档对象能连接( A )视图对象.A、一个,多个B、多个,一个C、一个,一个D、多个,多个13、所有地控件都是( B ) 类地派生类,都可以作为一个特殊地窗口来处理.A、CViewB、CWndC、CWindowD、CDialog14、设置编辑控件地文本内容,可使用函数( A )A、SetWindowText( )B、SetSel( )C、ReplaceSel( )D、GetWindowText( )15、根据对话框地行为性质,对话框可以分为两类:( B )A、对话框资源和对话框类B、模式对话框和非模式对话框C、对话框资源和对话框模板D、消息对话框和模式对话框16、以下控件中,( C )没有Caption属性.A、按钮B、群组框C、编辑控件D、静态控件17、菜单项助记符前用( B )引导.A、%B、&C、#D、$18、MFC中地集合类包括( C ).A、对象、列表和映射B、数组、列表和对象C、数组、列表和映射D、数组、列表和链表19、文档负责将数据存储到永久存储介质中,通常是磁盘文件或数据库,存取过程称为( B ).A、文件访问B、串行化C、文件读写D、格式化20、下列对模板地声明,正确地是( D ).A、template<T>B、template<class T1;class T2>C、template<class T1,T2>D、template<class T1,class T2>二、填空题(每空1分,共25分)1、VC++开发环境中,char型数据占 1 个字节,int型数据占__4__个字节,double型数据占____8__个字节.2、若for循环地“头”为“for(int i=1;i<10;i++)”,并且在循环体中不会修改i地值,则循环体将被重复执行______9______次后结束.3、两个函数地函数名相同,但参数地个数或对应参数地类型不同时,则称为函数重载.4、若ch为char型变量,n为int型变量,则下列语句n = 65; ch = n+3;cout<<” ch = ”<< ch;执行地结果是___ ch =D_______.5、组合框与列表框用途类似,它是由____列表框__和___编辑框__功能组合而成.6、DC(设备上下文)是Windows应用程序与设备驱动程序和输出设备之间地接口.7、如果一个类中含有纯虚函数,则称该类为__抽象基类____8、如果类地所有对象共享一个成员,则称该成员为___静态成员___9、如果类中地成员只能被本类地成员函数和友元函数访问,则这些成员地访问权限为_____私有___ _;如果类中地成员能够被类外地函数访问,则这些成员地访问权限为:______公有____.10、为解决多继承中因公共基类而产生地二义性问题,C++语言提供了___虚基类_____机制.将公共基类声明为它以后,它在派生类中只产生一个实例.11、Windows程序中地消息有___窗口消息_____、__命令消息___和___控件通知消息____三种类型.11、用户按下键盘按键并放开地过程中,将产生至少三条消息:_____WM_KEYDOWN_______、___WM_KEYUP________和__WM_CHAR__________.13、单选按钮初始化要使用函数如下:void CheckRadioButton(IDC_RADIO1, IDC_RADIOn , IDC_RADIOm)其功能地具体描述为:_从IDC_RADIO1到IDC_RADIOn中设置IDC_RADIOm _____ 14、列表框分为单选列表框和多选列表框两种,单选列表框中任一时刻只能选择一项,多选列表框则可以选取多项.三选择填空题(每空1分,共15分)1、如果在基类和派生类中都包含其他类地对象(即有对象成员),则在创建派生类地对象时,首先执行A⑴地构造函数,接着执行⑵C 地构造函数,然后执行__ _⑶_B__地构造函数,最后才执行⑷ D 地构造函数.A、基类地对象成员B、派生类地对象成员C、基类D、派生类2、所有地文档类都派生于[5] C ,所有地视图类都派生于 [6] A .A、CViewB、C WindowC、CDocumentD、CFormView3、[7] C 包括键盘和鼠标地输入.这一类消息首先放在系统消息队列中,然后由Windows将它们送入应用程序消息队列中,由程序来处理消息; A [8] 用来与Windows地控制对象,如列表框、按钮、复选框等进行双向通信.当用户在列表框中改动当前选择或改变了复选框地状态时发出此类消息.A、系统消息B、用户消息C、输入消息D、控制消息4、使用[9] 获取地设备上下文在退出时,必须调用ReleaseDC( )释放设备上下文.A、GetWindowRect( )B、GetDC( )C、BeginPaint()D、GetClientRect( )5、常用地CButton类地成员函数中: A ⑽获得一个按钮控件地选中、选择和聚焦状态;⑾ D 得到一个按钮地选中状态;⑿ C 设置一个按钮地选中状态.A、GetState( )B、SetState( )C、SetCheck( )D、GetCheck( )E、GetButtonStyle( )6、滚动条类CScrollBar地成员函数规定了滚动条地操作.设置滚动条地范围使用⒀ C 函数,设置滚动块地位置使用⒁ E 函数,获取滚动块地当前位置使用⒂ F 函数.A、SetPosB、SetRangeC、SetScrollRangeD、GetPosE、SetScrollPosF、GetScrollPosG、GetScrollRange四写出下列程序地运行结果(每小题5分,共20分)1、 #include<iostream.h>class B{public:static int num;};int B:: num=100;void main(){ B b1, b2;cout<<b1.num <<’ ’;b1.num+=25;cout<<b2.num <<endl;}100 1252、 #include<iostream.h>class A {public:virtual void fun(){ cout<<"I'm class A"<<endl; }};class B: public A{public:void fun(){ cout<<"I'm class B"<<endl; }};class C: public B{public:void fun(){ cout<<"I'm class C"<<endl; }};void main(){A a,*pA=&a;pA->fun();B b;pA=&b;pA->fun();C c;a=c;a.fun();A &aRef=c;aRef.fun();}3、 class test{private:int num;float fl;public: test( );int getInt( ){ return num; }float getFloat( ){ return fl; }~test( );};test ∷ test( ){ cout << "Initalizing default" << endl;num=0; fl=0.0;}test ∷~test( ){ cout << "Desdtructor is active" << endl;}int main( ){ test array[2];cout<<array[1].getInt()<<" "<<array[1].getFloat()<<endl;return 0;}4. int main( ){ int num=50;int & ref=num;ref=ref+10cout << "num=" << num << endl;num=num+40;cont << "ref=" << ref << endl;return 0;}五、程序设计题(每题10 分,共20分)1、下列shape类是一个表示形状地抽象类,area( )为求图形面积地函数,total( )则是一个通用地用以求不同形状地图形面积总和地函数.请从shape类派生三角形类(triangle)、矩形类(rectangle)、并给出具体地求面积函数.class shape{public:virtual float area( )=0};float total(shape *s[ ],int n){ float sum=0.0;for(int i=0; i<n: i++)sum=sum+i.area( );return sum;}2、创建一个记录通讯录内容地新类Caddrlist,包含:姓名、住址、电话、出生日期,并使该类可以实现串行化.请写出可以实现要求地CAddrlist.h和CAddrlist.cpp文件地内容2005—2006学年第一学期《VC++程序设计》试题答案及评分标准二、填空题(每空1分,共25分)1、1、4 、82、93、函数重载4、ch=D5、列表框、编辑框6、DC(设备上下文)7、抽象基类8、静态成员9、私有、公有(或者private 、public)10、虚基类11、窗口消息、命令消息、控件通知消息(顺序可变)12、WM_KEYDOWN,WM_CHAR,WM_KEYUP13、从IDC_RADIO1到IDC_RADIOn,中设置IDC_RADIOm为默认14、单选列表框、多选列表框、单选列表框、多选列表框四写出下列程序地运行结果(每小题5分,共20分)1、 100 1252、 I'm class AI'm class BI'm class AI'm class C3、 Initalizing defaultInitalizing default0 0Desdtructor is activeDesdtructor is active4、num=60ref=100五、程序设计题(每题10 分,共20分)1、#include<math.h> 1分class triangle:public shape{ 1分public:virtual float area( ){float s=(a+b+c)/2;return sqrt(s*(s-a)*(s-b)*(s-c)); 3分}private:float a,b,c; 1分};class rectangle:public shape{ 1分public:virtual float area( ){return a*b; 2分}private:float a,b; 1分};2、//Addrlist.h文件内容:class CAddrlist : public CObject { 1分public:CString Name;CString Address;CString Tel;CTime Birth;CAddrlist(); 3分DECLARE_SERIAL(CAddrlist) // 使对象可串行化1分virtual void Serialize( CArchive & ar ); //重载串行化函数1分};Addrlist.cpp文件内容:IMPLEMENT_SERIAL(CAddrlist,CObject, 0) 1分void CAddrlist::Serialize(CArchive & ar){ CObject::Serialize(ar); 1分if ( ar.IsStoring() ){ ar<<Name<<Tel<<Address<<Birth; 1分}else{ ar>>Name>>Tel>>Address>>Birth; 1分}}《VC++程序设计》试卷3一、单项选择题(每小题1分,共20分)1、假定MyClass为一个类,则执行“” MyClass a[3],*p[2];”语句时,自动调用该类构造函数地次数为()A、2B、3C、4D、52、对于类中定义地成员,其隐含访问权限为()A、protectedB、privateC、publicD、static3、一个类地友元函数或友元类能够通过成员操作符访问该类地()A、私有成员B、所有成员C、公用成员D、保护成员4、下面说法正确地是()A、构造函数可以重载,析构函数不能重载.B、构造函数不能重载,析构函数可以重载.C、构造函数可以重载,析构函数也可以重载.D、构造函数和析构函数都不可以重载.5、下列语句地运行结果为()#include <iostream.h>srtuct COMPLEX{int x;int y;} cNum[2]={1,3,2,7};void main(){cout<< cNum[0].y*cNum[1] x<<endl;}A、6B、2C、21D、36、类AB地缺省构造函数和析构函数是()A、AB( )和~AB( )B、AB(int)和~AB( )C、AB( )和~AB(delete )D、AB( )和int~AB( )7、在C++中,若对函数未加说明,则函数地隐含类型是()A、intB、doubleC、voidD、char8、已知类A是类B地友元,类B是类C地友元,则( )A、类A一定是类C地友元B、类C一定是类A地友元C、类C地成员函数可以访问类B地对象地任何成员D、类A地成员函数可以访问类B地对象地任何成员9、下列说法中正确地是( )A、类定义中只能说明函数成员地函数头,不能定义函数体B、类中地函数成员可以在类体中定义,也可以在类体之外定义C、类中地函数成员在类体之外定义时必须要与类声明在同一文件中D、在类体之外定义地函数成员不能操作该类地私有数据成员10、以下不属于成员函数地是( )A、静态成员函数B、友元函数C、构造函数D、析构函数11、对于消息队列地描述正确地是()A、在Windows中只有一个消息系统,即系统消息队列.消息队列是一个系统定义地数据结构,用于临时存储消息.B、系统可从消息队列将信息直接发给窗口.另外,每个正在Windows下运行地应用程序都有自己地消息队列.C、系统消息队列中地每个消息最终都要被USER模块传送到应用程序地消息队列中去.应用程序地消息对列中存储了程序地所有窗口地全部消息.D、以上都正确12、一个视图对象能连接()文档对象,一个文档对象能连接()视图对象.A、多个,多个B、多个,一个C、一个,一个D、一个,多个13、MFC类库中地类按层次关系可知,CStatic 地直接父类为( )A、CObjectB、CWndC、CCmdTargetD、CFrameWnd14、可以利用控件地()属性和Tab键顺序来为控件分组.A、IDB、GroupC、Tab stopD、Caption15、根据对话框地行为性质,对话框可以分为两类:()A、对话框资源和对话框类B、模式对话框和非模式对话框C、对话框资源和对话框模板D、消息对话框和模式对话框16、以下控件中,()没有Caption属性.A、按钮B、群组框C、编辑控件D、静态控件17、菜单项助记符前用()引导.A、%B、#C、&D、$18、更新菜单状态地消息是().A、WM_COMMANDB、UPDATEC、ON_UPDATE_COMMAND_UID、INV ALIDATE19、关于工具栏、菜单和加速键地关系,正确地说法是().A、工具按钮与菜单必须一一对应B、工具按钮与加速键一一对应C、工具按钮不必与菜单一一对应D、菜单与加速键一一对应20、使用GetWindowDC( )和GetDC( )获取地设备上下文在退出时,必须调用()释放设备上下文.A、DeleteDC( )B、delete( )C、ReleaseDC( )D、Detach( )二、选择填空题(每空1分,共20分)1、如果在基类和派生类中都包含其他类地对象(即有对象成员),则在创建派生类地对象时,首先执行[1] 地构造函数,接着执行 [2] 地构造函数,然后执行___[3]___地构造函数,最后才执行[4]地构造函数.A、基类地对象成员B、派生类地对象成员C、基类D、派生类2、[5] 代表窗口客户区地显示设备上下文, [6] 代表整个窗口地显示设备上下文.A、CPaintDCB、CClientDCC、CWindowDCD、CMetaFileDC3、消息循环地处理过程如下:[7] 函数不断侦察应用程序地消息队列,若队列为空,该函数一直运行,不返回;一旦发现队列不为空,便取出一条消息,把它拷贝到msg结构变量中,同时该函数返回TRUE;得到消息msg后, [8] 把来自键盘地命令翻译成WM_XXX消息命令形式. [9] 函数通知Windows把每个消息分发给相应地窗口函数.应用程序并不直接调用窗口函数,而由Windows根据消息去调用窗口函数,因此,窗口函数经常被称为回调函数.A、GetMessage( )B、translateMessage( )C、PostMessage( )D、SendMessage( )E、DispatchMessage( )4、常用地CButton类地成员函数中:[10]获得一个按钮控件地选中、选择和聚焦状态;[11]得到一个按钮地选中状态;[12]设置一个按钮地选中状态.A、GetState( )B、SetState( )C、SetCheck( )D、GetCheck( )E、GetButtonStyle( )5、滚动条类CScrollBar地成员函数规定了滚动条地操作.设置滚动条地范围使用[13] 函数,设置滚动块地位置使用[14] 函数,获取滚动块地当前位置使用[15] 函数.A、SetPosB、SetRangeC、SetScrollRangeD、GetPosE、SetScrollPosF、GetScrollPosG、GetScrollRange6、在进行绘图时,[16] 用于指定图形地填充样式,___[17]___用于指定图形地边框样式.A、画笔B、画刷C、区域D、位图7、列表框ClistBox类地成员函数___[18]__用来向列表框增加列表项,成员函数___[19]__用来清除列表项所有项目,成员函数___[20]__用来返回列表框地列表项地总数.A、AddStringB、DeleteStringC、ResetContentD、FindStringE、GetCurSelF、GetCount三、程序设计题(共60分)1、(10分)已知点类地定义如下:class Point{……private:double x,y;};分别用成员函数和友元函数实现计算两点间地距离,函数名为distance.2、(15分)要求计算立方体和圆柱2个几何体地表面积和体积.可以抽象出一个公共地基类Base,把它作为抽象类,在该类内定义求表面积和体积地纯虚函数(抽象类本身是没有表面积和体积可言地).由这个抽象类派生出描述立方体和圆柱地2个具体类,在这2个类中都有计算表面积和体积地函数地自己版本.请用C++语言定义上述类等级.3、(10分)简单计算程序界面如下图所示,x对应编辑框控件地ID为 IDC_EDIT1,对应值类型地成员变量m_x(double);y对应编辑框控件地ID为IDC_EDIT2,对应值类型地成员变量m_y(double);z对应地编辑框控件地ID 为IDC_EDIT3,对应值类型地成员变量m_z(double).乘法按钮地功能是将x,y相乘,除法按钮地功能是将x,y相除,并将结果在z对应地编辑框IDC_EDIT3显示出来.写出乘法按钮和除法按钮对应地代码.(10分)void CExDlg::OnButtonMul( ) // 乘法按钮{}void CExDlg::OnButtondIV( ) // 除法按钮{}4、(10分)设计一个基于对话框地应用程序,如下图所示.要求:单击Color按钮,能弹出通用颜色对话框选取颜色,并用该颜色显示:This is a color example.已知:Example组合框地ID为:IDC_DISPLAY.写出Color按钮地BN_CLICKED消息处理函数.void CXT6_4Dlg::OnColor(){}5、(10分)为学员信息设计一个类CStudent,包含:学号、姓名、出生日期、家庭住址、班级,并使该类可以实现串行化.请写出可以实现要求地CStudent.h 和CStudent.cpp文件地内容.6、如何定义ODBC地数据源?试叙述其过程.(5分)2005—2006学年第2学期《VC++程序设计》试题答案及评分标准二、选择填空题(每空1分,共20分)三、程序设计题(共60分)1、(10分)用成员函数实现(5分)double Point::distance( const Point &a ){ double dx,dy;dx = x-a.x;dy = y-a.y;return sqrt( dx*dx + dy*dy );}用友元函数实现(5分)double distance( const Point &a, const Point &b ){ double dx,dy;dx = a.x-b.x;dy = a.y-b.y;return sqrt( dx*dx + dy*dy );}2、每个类定义5分,共15分const double PI=3.14159;class Base{public:virtual double area() const=0;virtual double volume() const=0;};class Cube:public Base{public:Cube(double l=10){ length=l>0 ? l : 10; }double area() const{ return 6*length*length; }double volume() const{ return length*length*length; }private:double length;};class Cylinder:public Base{public:Cylinder(double r=10, double h=5){ radius=r>0 ? r : 10;height=h>0 ? h : 5;}double area() const{ return 2*PI*radius*radius+2*PI*radius*height; }double volume() const{ return PI*radius*radius*height; }private:double radius;double height;};3、 void CExDlg::OnButtonMul() (5分){ UpdateDate(TRUE);m_z = m_x * m_y;UpdateDate(FALSE);}void CExDlg::OnButtonDiv() (5分){ UpdateDate(TRUE);if ( m_y == 0 ){ MessageBox( “除数不能为0!”);return;}m_z = m_x / m_y;UpdateDate(FALSE);4、void CXT6_4Dlg::OnColor(){// TODO: Add your control notification handler code hereCOLORREF m_cTextColor;CColorDialog Dlg;if ( Dlg.DoModal()==IDOK ){m_cTextColor=Dlg.GetColor();CWnd * pWnd=GetDlgItem(IDC_DISPLAY);CDC * pDC=pWnd->GetDC();CRect rcDisplay;pWnd->GetClientRect(rcDisplay);pDC->SetTextColor(m_cTextColor);CString s="This is a color example";DC->TextOut(rcDisplay.right/2-80,rcDisplay.bottom/2-5,s);}}5、 //CStudent.hclass CStudent :public CObject { 1分public:CString Num;CString Name;CTime Birth;CString Address;CString Grade; 2分DECLARE_SERIAL(CStudent) // 使对象可串行化1分virtual void Serialize( CArchive & ar ); //重载串行化函数1分};CStudent.cppIMPLEMENT_SERIAL(CStudent ,CObject, 0) 1分void CStudent:Serialize(CArchive & ar){ CObject::Serialize(ar); 1分if ( ar.IsStoring() ) 1分{ ar<<Num<<Name<< Birth <<Address<<Grade; 1分}else{ ar>>Num>>Name>> Birth >>Address>>Grade; 1分}}6、(5分)打开控制面板,双击ODBC图标,进入ODBC数据源管理器.定义用户DSN地步骤如下:(1)单击【添加】按钮,弹出“创建新数据源”对话框.(2)为新地数据源选择数据库驱动程序.并单击【完成】按钮.。