MFC考试复习题0.docx
- 文档编号:9198211
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:48
- 大小:249.66KB
MFC考试复习题0.docx
《MFC考试复习题0.docx》由会员分享,可在线阅读,更多相关《MFC考试复习题0.docx(48页珍藏版)》请在冰豆网上搜索。
MFC考试复习题0
复习题
:
:
局部全局变量的重名问题。
即在局部变量的作用域内,可用“:
:
”对被隐藏的同名全局变量进行访问。
内联函数:
消除函数调用时的系统开销,以提高运行速度,合一些小函数,用空间换时间适。
inti和int&ri=i:
表示变量ri引用了变量i,这时ri就可看作是i的别名,即它们指向同一个内存单元。
派生类对基类成员的继承关系:
基类成员
作为派生类成员
公有派生
私有派生
private成员
不可直接访问成员
不可直接访问成员
protected成员
protected成员
private成员
public成员
public成员
private成员
联编的概念与作用:
编译时的多态是通过静态联编来实现的。
所谓联编(binding。
亦称束定),就是把函数名与其函数体的程序代码连接(联系)在一起。
静态联编时,系统用实参与形参进行匹配,对于同名的重载函数便根据参数上的差异进行区分,然后进行联编。
从而实现了多态性。
运行时的多态是用动态联编实现的。
动态联编(也称晚联编)是程序运行时才进行的联编。
即当程序调用到某一函数(过程)名时,才去寻找和连接其程序代码,对面向对象程序而言,就是当对象接收到某一消息时,才去寻找和连接相应的方法。
6、可视化开发系统往往集成了一系列系统可用资源和开发工具,主要是指哪些?
程序调试工具,包括源程序语法检查、可执行程序修改和运行监视等;可选择并构成具体语句或源程序结构的例程库及Help;资源管理器,包括图形化窗口及组成元素的多种对象的编辑器;应用程序Help和Setup开发工具包;源程序编辑器和编译器;系统函数库和系统函数开发工具。
7、API函数有哪些的功能?
窗口管理函数实现窗口的创建、移动和修改功能;系统服务函数:
实现与操作系统有关的多种功能;图形设备(GDI)函数:
实现与设备无关的图形操作功能。
8、API、Win系统和Win应用程序之间的相互关系
API为应用程序提供Win系统各种特殊函数及数据结构定义;API是Win系统与Win应用程序间的标准程序接口;Win应用程序可以利用上千个标准API函数调用系统功能。
9、一个应用程序的窗口一般包含哪些成分?
控制菜单框;下拉菜单;标题栏;工作区;窗口边界;最大化按钮;最小化按钮;垂直滚动条;水平滚动条。
10、填空:
编写一个Windows应用程序首先应创建一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换的过程。
11、填空:
在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中。
12、填空:
VisualC++支持三种DLL,它们分别是非MFC动态库、常规DLL、扩展DLL。
13、填空:
Windows程序的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生往往并不要求有次序之分。
14、填空:
Windows应用程序利用Windows消息(Message)与应用程序及系统进行信息交换。
15、一个完整的Windows应用程序通常由哪五种类型的文件组成?
(1)C语言源程序文件;
(2)头文件;(3)模块定义文件;(4)资源描述文件;(5)项目文件
16、简述复选框、单选按钮、下压式按钮的用途
常用于只有两种完全相反状态的情况下;适用于同一组属性相同的数据中选一个数据;适用于消息的发送。
17、对话框用于处理哪两类消息?
对话框只处理两类消息,一类是创建窗口的消息,另一类是控件的消息。
在普通窗口中接受wm_create消息,而在对话框中接受wm_initdialog消息。
18、对话框分为哪几类?
它们有什么不同?
对话框分为模式对话框和非模式对话框。
模式对话框要求用户在继续执行前回答对话框,否则不能进行。
非模式对话框可以不回答对话框,继续进行。
19、使用AppWizard创建SDI和MDI界面的应用程序的过程几乎完全一样,而其主要差别在哪些方面?
在创建SDI界面的应用程序时,不生成CChildFrame类,CMainFrame类的基类为CframeWnd;在创建MDI界面的应用程序时,CMainFrame类的基类为CMDIFrameWnd。
20、视图是如何在文档和用户之间起中介作用的?
视图可以直接或间接的访问文档类中的成员变量,它从文档类中(而不是从存储介质中)将文档中的数据取出来,然后在屏幕上显示文档的数据;它可以接收用户的输入,并接受用户的修改。
21、命令消息与Windows消息和控件控制消息有和不同?
命令消息可以被多种对象处理,这些对象除了窗口和视图外,还可以是文档、文档模板或应用程序本身。
而Windows消息和控件通知消息就只能被窗口和视图处理。
22、文档类是如何将数据保存到磁盘文件或数据库中呢?
文档类通过串行化的过程将数据保存到磁盘文件或数据库中
23、请简述从CDocument类派生自己的文档类的典型步骤。
(1)每一个文档类型从CDocument类(当然也可以是其它CDocument类的派生类)派生一个相应的文档类。
(2)为文档类添加成员变量。
这些成员变量用来保存文档的数据,其它对象(如与文档相关联的视图)直接或间接的访问这些成员变量来读取或更新文档的数据。
(3)重载Serialize成员函数,实现文档数据的串行化。
24、简述文档、框架窗口和视图的创建过程之间的先后顺序
创建文档→创建框架窗口→创建视图
25、简述设备上下文的绘图原理
(1)绘图程序不是寻址硬件,而是调用GDI函数,这些函数引用设备环境的数据结构,Windows把该设备环境结构映射到物理设备,并发出适当的输入/输出指令。
(2)在编程过程中,不必关心硬件的具体实现,可以直接进行抽象的操作。
(3)利用GDI,只要把相关的GDI对象选入设备上下文,然后用设备上下文对象提供的有关方法就可以绘制出各种图形,当我们需要在显示器或打印机上绘图时,就需要调用GDI函数。
26、如何解决擦除问题?
在应用程序运行中,很多操作可能会破坏窗口内容,移动覆盖在窗口上的窗口或对话框、菜单拉下后又放开以及改变窗口的大小等,此时Windows都会发出WM_PAINT消息告知客户区的变动,同时发出WM_NCPAINT消息告知非客户区的变动。
通常我们要在WM_PAINT消息的响应函数OnPaint()中进行客户区的画面重画工作,而非客户区的重画工作是由系统自己完成的。
我们也可以使用Invalidate()函数、ValidateRgn()函数和ValidateRect()函数强制窗口重画。
27、简述使用画笔的主要步骤
⑴创建新的画笔类对象,可以调用CPen类的构造函数CPen:
:
CPen()来初始化新画笔;也可以调用CPen类的成员函数CreatePen()来实现。
(2)保存原来的旧画笔,并将新创建的画笔对象选入设备对象中。
(3)开始实际绘图工作,调用CDC类的各种绘图函数进行绘图。
(4)恢复原来的旧画笔,同样调用SelectObject()函数来实现。
28、MFC支持哪两种线程
用户界面线程和工作者线程。
29、简述线程的创建原理
为了使用MFC创建一个线程,你所做的就是编写一个你希望的和程序的其它部分同时运行的函数,然后调用AfxBeginThread()来启动一个用以执行你的函数的线程。
只要线程的函数在运行,线程就存活着,当线程函数结束时,线程就被销毁。
30、有哪三种使多线程更安全的方法?
三种使多线程程序更安全的线程同步对象—临界区(criticalsection)、互斥对象(mutex)、信号量(semaphore)。
31、简述DLL的优点
在Windows操作系统中使用DLL有很多优点,最主要的一点是多个应用程序、甚至是不同语言编写的应用程序可以共享一个DLL文件,真正实现了资源“共享”,大大缩小了应用程序的执行代码,更加有效的利用了内存;使用DLL的另一个优点是DLL文件作为一个单独的程序模块,封装性、独立性好,在软件需要升级的时候,开发人员只需要修改相应的DLL文件就可以了,而且,当DLL中的函数改变后,只要不是参数的改变,程序代码并不需要重新编译。
这在编程时十分有用,大大提高了软件开发和维护的效率。
32、利用ODBC创建数据库应用程序的步骤
(1)建立数据源;
(2)用Appwizard创建程序框架;(3)显示数据库信息;
33、使用画笔的主要步骤
创建新画笔,保存旧画笔,并使用新画笔取代旧画笔,最后再恢复原来的旧画笔。
34、使用画刷的主要步骤
创建新画刷,保存旧画刷,并使用新画刷取代旧画刷,最后再恢复原来的旧画刷。
35、简述两种创建自定义字体的方法
第一种是间接创建法,通过调用CFont类的函数CreateFontIndirect来实现;第二种是直接创建法,通过调用CFont类的函数CreateFont来实现。
36、指出下面代码中哪几行代码是创建新画笔,并保存旧画笔?
哪行代码是恢复就画笔?
voidCDrawAppView:
:
OnDraw(CDC*pDC)
{
CDrawAppDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
CPenpen(PS_SOLID,2,RGB(0,0,255));
CPen*pOldPen=pDC->SelectObject(&pen);
pDC->MoveTo(20,30);
pDC->LineTo(50,60);
pDC->SelectObject(pOldPen);
}
答案:
创建新画笔和保存旧画笔的代码行为:
CPenpen(PS_SOLID,2,RGB(0,0,255));
CPen*pOldPen=pDC->SelectObject(&pen);
恢复旧画笔的代码行为:
pDC->SelectObject(pOldPen);
37、请指出下面的代码中哪行代码是创建新画刷?
哪行代码是保存旧画刷并选择新画刷?
哪行代码是执行绘图操作?
哪行代码是恢复就画刷?
voidCDrawAppView:
:
OnDraw(CDC*pDC)
{
CDrawAppDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
CBrush*brush;
brush=newCBrush(RGB(255,0,0));
CBrush*pOldBrush=pDC->SelectObject(brush);
pDC->Rectangle(20,20,60,60);
pDC->SelectObject(pOldBrush);
}
答案:
创建新画刷:
brush=newCBrush(RGB(255,0,0));
保存旧画刷并选择新画刷:
CBrush*pOldBrush=pDC->SelectObject(brush);
执行绘图操作:
pDC->Rectangle(20,20,60,60);
恢复旧画笔:
pDC->SelectObject(pOldBrush);
38、请指出下面的代码中哪行代码是创建新字体?
哪行代码是选择新字体和保存旧字体?
哪行代码是设置字体颜色?
哪行代码是设置背景颜色?
哪行代码是恢复旧字体?
voidCDrawAppView:
:
OnDraw(CDC*pDC)
{charmyStr[100];
CFontfont;
font.CreateFont(8,0,0,0,FW_NORMAL,1,0,0,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
VARIABLE_PITCH|FF_ROMAN,“TimesNewRoman”);
CFont*pOldFont=font.SelectObject(&font);
pDC->SetTextColor(RGB(0,0,255));
pDC->SetBkMode(TRANSPARENT);
strcpy(myStr,“HelloWorld.”);
pDC->TextOut(20,30,myStr,strlen(myStr));
pDC->SelectObject(pOldFont);
}
答案:
创建新字体:
font.CreateFont(8,0,0,0,FW_NORMAL,1,0,0,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
VARIABLE_PITCH|FF_ROMAN,“TimesNewRoman”);
选择新字体和保存旧字体:
CFont*pOldFont=font.SelectObject(&font);
设置字体颜色:
pDC->SetTextColor(RGB(0,0,255));
设置背静模式:
pDC->SetBkMode(TRANSPARENT);
恢复旧字体:
pDC->SelectObject(pOldFont);
39、单项选择题(每小题2分,共12分)在每小题列出的四个选项中只有一个选项是符合题目要求的,请将其代码填在题后的括号内。
错选或未选均无分。
1.在C++中,函数原型不能标识(D)
A.函数的返回类型B.函数参数的个数
C.函数参数类型D.函数的功能
2.对于任意一个类,析构函数的个数最多为(B)
A.0B.1C.2D.3
3.下面说法正确的是(B)
A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方
B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方
C.类的内联函数必须在类体内定义
D.类的内联函数必须在类体外通过加关键字inline定义
4.在C++程序中,对象之间的相互通信通过(B)
A.继承实现B.调用成员函数实现
C.封装实现D.函数重载实现
5.可以用p.a的形式访问派生类对象p的基类成员a,其中a是(D)
A.私有继承的公有成员B.公有继承的私有成员
C.公有继承的保护成员D.公有继承的公有成员
6.派生类中的成员函数可以访问基类的(D)
A私有段成员
B保护段成员
C公有段成员
D保护段和公有段成员
40、改错题(共4分)
指出下面程序段中的错误,并说明出错原因。
#include
classA{
public:
voidfun(){cout<<″a.fun″< }; classB{ public: voidfun(){cout<<″b.fun″< voidgun(){cout<<″b.gun″< }; classC: publicA,publicB{ private: intb; public: voidgun(){cout<<″c.gun″< voidhun(){fun();} }; 答案: voidhun(){fun();}出错,C: : fun()有二义性。 41、程序分析,写出下列程序的运行结果(每题5分) (1) #include externinta[]={100,200,300}; voiddisplay(); voidmain() { inta[]={10,20,30}; for(intj=0;j<3;j++)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC 考试 复习题