vc复习题答案.docx
《vc复习题答案.docx》由会员分享,可在线阅读,更多相关《vc复习题答案.docx(16页珍藏版)》请在冰点文库上搜索。
![vc复习题答案.docx](https://file1.bingdoc.com/fileroot1/2023-6/10/8e7eadb3-1a2a-4d42-9576-4d3bbb1e5310/8e7eadb3-1a2a-4d42-9576-4d3bbb1e53101.gif)
vc复习题答案
一、名词
1.面向对象技术:
全称OrientedObjectTechnology,是以对象为单位描述客观世界的一种新技术,其领域包括OO-PL(程序设计语言)、OO-DB。
2.对象:
object,是对现实世界任何实体的抽象描述,包含数据以及对数据的操作。
3.类与类库:
类(class)是对一组性质相近的客观对象的抽象归纳,它将对象的共性集中起来,形成一个集合。
类库:
类(class)——是一种C++数据类型,它能够提供访问某个“类对象”的接口,这个“类对象”由一个名字来标识。
一个类定义包括类的变量和方法,以及实例的变量和方法,它还包含着它的父类的所有变量和方法。
类库(classlibrary)——支持相同应用程序的相关C++类的集合。
对象(object)——是“类”的实例,它对能够修改类状态的属性(数据)和行为(函数)都作了具体实现。
4.MFC:
微软基础类(MicrosoftFoundationClasses),类库是一些类的集合,其中封装了大量的有用的函数和数据结构,一个成熟的软件开发工具都有一个功能庞大的类库与他匹配,与VisualC++捆绑在一起的是微软基础类MFC。
5.匈牙利命名法:
是匈牙利人查尔斯·西蒙尼提出的。
有两条规则:
Ø标识符的名字以一个或者多个小写字母开头,用这些字母来指定数据类型。
Ø在标识符内,前缀以后就是一个或者多个第一个字母大写的单词,这些单词清楚地指出了源代码内那个对象的用途。
如,nCount为一整型变量,bFlag为一Boolean型变量。
基类(baseclass)——指C++中的一些抽象的、基础性的“大”类,其它类能够通过继承关系由它派生。
派生类(derivedclass)——由一个基类派生出来的类,它由基类创建,并且继承了该基类的所有特性。
6.类的继承性与派生性:
类的派生类:
在已有类的基础上定义一个新类,新定义的类称为原有类的派生类或子类,原有的类称为新定义的类的基类或父类,派生类继承了基类所有的属性和行为。
派生性指的是由原有类可以派生出具有其特性的新类
类的继承性——与类的派生性相反,类的继承性是指新类可以继承基类的所有特性。
有单继承和多继承之分。
类的继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系
7.类的封装性:
类的封装就是只允许类设计人员检查赋予数据成员的任何数值的有效性,从而防止编程错误的发生。
控制内置数据结构访问的另一个好处是,类的作者可以随便改变这些数据结构的设计而不会影响使用该类的程序的其他部分。
类的封装是通过关键字public、private、protected来实现的。
8.构造函数与析构函数:
构造函数:
用于构造类的“对象”,是类的特殊成员函数。
当类对象被创建时,它首先被执行。
其功能是为类的数据成员设置初值,但其本身参数却只能在定义对象时指定。
类标识名(可赋值形参表)。
析构函数:
所起作用与构造函数完全相反,用来在对象删除前做一些清理工作和数据保存工作。
~类标识名()
9.图形设备接口(GDI):
GraphicsDeserveInterface,是Windows提供的一个支持图形编程处理的抽象接口,它内含各种绘图工具,程序员通过使用这些抽象工具,避免了直接与各式各样的设备硬件打交道,实现了编程中的“设备无关性”。
10.序列化函数:
持久性是指对象所具有的保存和加载其状态的能力,在程序运行结束之前通过将对象的当前状态写入永久性存储体中,在下次再运行时通过数据的读取而恢复对象的状态。
这种保存和回复的过程称为序列化(serialize)。
序列化是通过文档派生类的Serialize()函数来完成,该函数由CArchive类的ar对象指针作为参数,由一个if-else结构完成序列化的文档读写功能。
11.数据成员与成员函数:
数据成员:
C++将对象的属性抽象成为数据成员;
成员函数:
C++将对象的行为抽象为成员函数。
成员函数的定义:
1)将成员函数的定义直接写在类中,在类中直接定义成员函数的情况一般适合于成员函数规模较小的情况,也就是说它们一般为内联函数,即使没有明确用inline关键字。
(2)在类的定义体中只写出成员函数的原型说明,而成员函数的定义写在类的定义之后,这种情况比较适合于成员函数体较大的情况;但这时要求在定义成员函数时,在函数的名称之前加上其所属性类名及作用域运算符“:
:
”。
定义成员函数的一般类型为:
返回值类型类名:
:
成员函数名(参数说明)
{成员函数体}
二、简述与列举
1.类与对象的关系
类是对象的集合,对象可视作类的“实例”。
对象与类,就好比客观世界中的物质与意识,树木——森林。
2.面向对象程序设计的特点
模块性、封装性、复用性、灵活性、易维护性、增量设计性。
3.面向对象程序设计的优点
–方法学上更近自然
–围绕对象,完成软件设计与实现
–开发周期短,代码效率高,可复用性强
–系统测试与维护简便
4.VC++开发环境的常用工具
VisualC++的集成开发环境DeveloperStudio提供了大量的实用工具以支持可视化编程特性,如AppWizard、项目工作区、ClassWizard、WizardBar、ComponentGallery等。
在由AppWizard所创建的应用程序框架基础之上,用户应根据最终软件功能的实际需要来完善程序界面并实现各种人机交互功能。
完善界面的工作一般包括:
添加菜单项、增加工具栏按钮、添加工具条、添加对话框等Windows程序资源。
实现人机交互主要依赖于“Windows消息映射机制”来完成,其操作是主要通过利用ClassWizard工具创建消息宏和函数来进行
5.应用程序向导与类向导
应用程序向导相当于一个源程序生成器,它能够根据用户在各向导步骤对话框中的选项生成一系列文件,这些文件通过一个项目互相关联,并最终生成一个可执行程序。
ClassWizard用于建立新类,定制类,把消息映射成类的成员函数,或者把控制框映射为类变量成员。
ClassWizard所能识别的类全部被保存于数据库文件(.CLW)中。
6.类向导在VC编程中的作用
创建新类
把消息映射为类的成员函数
新建或删除消息处理函数
察看已被处理的消息并跳到消息处理代码处
定义成员变量
创建新类时,自动加入方法和属性
处理现有的类和类库
7.VC++工作区窗口的功能
项目工作区是DeveloperStudio的一个最重要的组成部分,程序员的大部分工作都在此完成。
DeveloperStudio使用项目工作区来组织项目、元素以及项目信息在屏幕上的出现方式。
一个项目工作区中,可以处理:
一个工程和它所包含的文件
一个工程的子工程
多个相互独立的工程
多个相互依赖的工程
8.利用VC++完善应用程序用户界面的常见工作有哪些?
完善界面的工作一般包括:
添加菜单项、增加工具栏按钮、添加工具条、添加对话框等Windows程序资源。
9.简述利用VC++创建一个基于数据库支持应用程序的一般步骤
(1)用自己熟悉的DBMS创建一个数据库;
(2)自定义ODBC数据源名(DSN)
Ø在“控制面板”中双击“ODBC数据源”图标打开数据源管理器;
Ø单击“添加”按钮,弹出“创建DSN”对话框;
Ø选择好用户拟添加的DSN驱动程序,如“MicrosoftAccessDriver”,单击“完成”;
Ø在新弹出的“ODBC数据源安装”对话框内,键入“数据源名”和“描述”项,单击“选取”钮,选好刚创建好的“DSN”;
Ø依次“确定”、“确定”,退出对话框,结束设置。
(3)使用应用程序向导创建一个“基于数据库支持”的SDI或MDI(注意:
在向导的第2步设置中必须选择“无文件支持的数据库视图”或“有文件支持的数据库视图”);同时,单击“数据源”按钮,进入下层对话框。
Ø在ODBC下拉列表中选取以前创建的“DSN”,单击“确定”,进入下层;
Ø在“选择数据库表名称”对话框中,选取指定“表名”,单击“确定”;
Ø单击“完成”,返回第2步;
Ø向导的其它步骤缺省,编译运行。
完成程序框架的创建。
创建“浏览数据库记录”的对话框。
(4)通过以上步骤,MFC自动为用户创建了浏览数据库记录的工具按钮和“记录”主菜单项,但要想在视图中看到数据库的记录,则需要进一步添加对话框控件,使之与数据表的字段相关联。
操作如下:
Ø切换到“ResourceView”标签页,定位并打开表单视图类的对话框资源IDD_EX_ODBC_FORM;
Ø为对话框添加相关控件(如:
P209上图表);
Ø打开“类向导”对话框,切换到“成员函数”标签页,选择“用户视图类”,一一为以上“控件”添加相关联的数据成员;(注意:
这里的数据变量已经自动被设置好了,用户只需要从下拉列表中选择即可);
Ø编译并运行,即可在视图中实现数据库表的浏览。
10.列举至少6种MFC控件类
CruntimeClassCobject类CcmdTarget类CwinApp类CWnd类CframeWnd类Cview类Cdocument类
11.列举至少6种常用Windows控件类型
(Windows提供两种控件:
标准控件和公共控件。
)
标准控件有:
静态控件、编辑框、按钮、列表框、组合框和滚动条
各控件的功能:
静态控件——用于提示文字或美工图片;编辑框——接受键盘输入信息;按钮中的单选钮——提供排他型选择;复选框——提供多项选择;列表框——以列表方式显示各选项;组合框——是编辑框与列表框之集成;滚动条——控制文档的显示范围。
12.简述利用VC++创建菜单栏和工具栏按钮的方法
(1)创建菜单栏的方法:
建立菜单资源、添加菜单命令的处理函数、为菜单命令设置加速键‘
为新菜单添加“弹出式快捷菜单”
(2)添加工具栏按钮的方法:
工具栏是由形象化的位图按钮所组成,它结合了菜单和快捷键的共同优点,具有操作直观快捷,使用方便的特点。
工具栏内的按钮一般都与某一特定的菜单命令相对应,从功能上讲,它与特定菜单命令一致。
在具体编程实现上,程序员应当先利用资源视图设计出新按钮图形图标,后将其ID值设置成与对应菜单项ID相同即可。
(不再需要添加对应的命令消息处理函数。
如果工具栏按钮没有对应的菜单项,必须利用ClassWizard类向导为工具栏添加命令消息处理函数。
)
13.举例说明为应用程序添加模式对话框的方法
Ø创建对话框模板资源和相关控件;
Ø用类向导创建对话框类和与控件相关联的成员变量和消息处理函数;
Ø设计程序访问接口来显示对话框并获取与控件相关联的程序数据。
14.简述在状态栏显示字符串信息的方法
状态栏是位于主窗口底部,用于显示当前操作提示信息和键盘状态的长条型子窗口,一般由状态信息行和状态指示器两部分组成。
前者用于动态地显示APP串表资源中的字符串,后者用于显示键盘的状态信息。
通常,MFC程序将状态条自左向右分成4个窗格:
(1)窗格显示菜单或工具栏的提示信息;
(2)窗格显示键盘的大小写状态;(3)窗格显示数字键盘状态;(4)窗格显示键盘的ScrollLock状态。
在MainFrame.cpp文件中,StatusBar由一个静态数组来定义:
StaticUINTindicators[]=
{
ID_SEPARATOR,//定义分隔符,作为提示信息行的面板标识
ID_INDICATOR_CAPS,//大小写指示器面板标识
ID_INDICATOR_NUM,//数字指示器面板标识
ID_INDICATOR_SCRL,//滚动指示器面板标识
};
CStatusBar类有两个重要函数:
SetPaneText()用于在指定窗格上显示字符信息,SetPaneInfo()可改变一个指示器面板的ID、风格和宽度。
•实例:
修改前述DrawCoins程序的状态栏,使其能动态显示硬币数目。
(1)在“StringTable”中加入新的字符串信息,其ID为ID_INDICATOR_COINS,Caption为”硬币数目”。
(2)在Mainframe.cpp中修改indicators[]数组:
StaticUINTindicators[]=
{
ID_SEPARATOR,//定义分隔符,作为提示信息行的面板标识
ID_INDICATOR_COINS,//新添加一个指示器面板标识
ID_INDICATOR_CAPS,//大小写指示器面板标识
ID_INDICATOR_NUM,//数字指示器面板标识
ID_INDICATOR_SCRL,//滚动指示器面板标识
};
(3)在视图类的OnDraw()函数中定制状态栏新窗格的显示信息
•在OnDraw()函数中添加如下代码:
CStringstrCoins;//声明状态栏新窗格的字符串变量
CStatusBar*pStatus=(CStatusBar*)AfxGetApp()->m_pMainWnd->GetDescendantWindow(ID_VIEW_STATUS_BAR);//状态栏指针
if(pStatus)
{
strCoins.Format("当前硬币个数:
%d",pDoc->m_nCoins);
pStatus->SetPaneInfo(1,1,NULL,98);//指定序号窗格的宽度
pStatus->SetPaneText(1,strCoins);//在指定窗格显示硬币个数
}
编译并运行,检验正误。
15.简述MFC的文档与视图的关系
(1)一个试图对象有且只有一个与之相关联的文档对象
(2)一个文档可以有多个视图对象与之相关联,但一个文档对象只反映当前视图的变化。
当一个文档的数据通过某个视图被修改过后,与他关联的每一个视图都必须对修改作出反应。
16.简述MFC的图形设备接口类DC
为了满足不同的DC应用要求,MFC将DC封装成几种不同的类,每一种类都封装了相应的设备环境句柄。
CDC类
CPaintDC类
CClientDC类
CWindowDC类
CMetaFileDC类
17.怎样利用VC++设计一个全新的类
在VC++中定义一个新类,执行Insert/NewClass命令,打开NewClass对话框,在Classtype下拉列表框中选择GenericClass,在Name文本框中输入Cline,在Baseclass中输入CObject,然后单击OK按钮,则自动生成类Cline的头文件Line.h和实现文件Line.h。
为类Cline定义成员变量和成员函数,在实现文件Line.h中编写实现代码。
18.列举5个实现画图的函数原型
SetPixel()
用指定颜色画“像素”点,返回RGB值
MoveTo()
移笔至新坐标,返回旧坐标
LineTo()
画直线,返回非0值
Polyline()
依据多点画折线
Polygon()
依据多点画多边形
PolyBezier()
依据多点画贝兹尔曲线
Rectangle()
依据两点画矩形
RoundRect()
依据两点圆角及圆角半径画圆角矩形
Ellipse()
依据矩形画内切椭圆或圆
Arc(),ArcTo()
逆时针画弧,画弧至终点
还有:
Pie()画扇形;Chord()画弦;DrawIcon()画图标
19.列举至少5个绘制文本的CDC函数原型
TextOut()
起点坐标,“字符串”
DrawText()
在矩形区域内输出“多行文本”
ExtDrawText()
用指定矩形“剪裁”多行文本
SetTextColor()
设置文本颜色(RGB值)
SetBkColor()
设置文本背景颜色(RGB值)
SetBkMode()
背景模式(OPAQUE,TRANSPARENT)
SetTextAlign()
设置文本对齐方式,以TA_为前缀
SetTextCharacterExtra()
设置字符间距
与上述“Set……”函数相对应的还有“Get……”函数。
20.列举Windows鼠标消息处理函数的类型
鼠标消息的类型
WM_MOUSEMOVE(移动);WM_LBUTTONDBLCLK(双击左键);
WM_LBUTTONDOWN(按下左键);WM_LBUTTONUP(释放左键);
WM_RBUTTONDOWN(按下右键);WM_RBUTTONUP(释放右键);
鼠标消息分为两类:
在客户去操作鼠标所产生的客户区鼠标消息和在飞客户去操作鼠标所产生的非客户区鼠标消息
21.简述为应用程序设定资源标识号的方法
简述为应用程序设定资源标识号的方法在VC++中,资源是通过标识符(ID)来标识的,每当用户创建一个新的资源或资源对象时系统将自动打开相应的资源编辑器,为其提供缺省名称并赋值,该定义保存在Resource.h文件中。
当新建一个资源时,资源编辑器自动给资源分配一个资源标识号ID。
为了对对象标识符进行有效的管理,VC++提供了资源标识符浏览器,打开资源标识符浏览器的方法如下:
选中“View(查看)”菜单中的“ResourceSymbols(资源符号)”命令可以打开“ResourceSymbols”对话框。
其中列出了已被使用和未被使用的标识符名称及其对应的整数值。
标识符浏览器可以完成的功能有:
§建立新的标识符。
§改变未被使用的标识符名称及数值。
§删除未被使用的标识符。
§快速切换到某标识符对应的资源编辑器窗口中。
一般情况下,不同的资源使用不同的资源标识符前缀。
22.简述鼠标消息的处理方法
当用户操作鼠标时产生的消息主要有:
WM_MOUSEMOVE(移动);WM_LBUTTONDBLCLK(双击左键);
WM_LBUTTONDOWN(按下左键);WM_LBUTTONUP(释放左键);
WM_RBUTTONDOWN(按下右键);WM_RBUTTONUP(释放右键);
鼠标消息氛围下面两类:
在客户区操作鼠标时产生的客户区鼠标消息和在非客户区操作鼠标时产生的非客户区鼠标消息。
通过消息结构中的消息参数wParam来区分这两类消息,客户区鼠标消息发送到应用程序后,可以由应用程序自己处理,在客户区以外的区域产生的非客户区消息由windows操作系统处理,应用程序一般不需要处理。
23.简述文档读写的方法
采用C++文件流(包括ifstream,ofstream和fstream等)的方法处理文件;将文件作为MFC类Cfile的一个对象进行处理;利用MFC类Carchive对文档进行序列化处理。
在MFC应用程序中一般采用序列化的方法进行文档的读写,这样可以直接避免直接处理一个物理文件。
24.简述编写一项有数据库支持的SDI应用程序的主要步骤
1、用自己熟悉的DBMS创建一个数据库;
2、自定义ODBC数据源名(DSN)
Ø在“控制面板”中双击“ODBC数据源”图标打开数据源管理器;
Ø单击“添加”按钮,弹出“创建DSN”对话框;
Ø选择好用户拟添加的DSN驱动程序,如“MicrosoftAccessDriver”,单击“完成”;
Ø在新弹出的“ODBC数据源安装”对话框内,键入“数据源名”和“描述”项,单击“选取”钮,选好刚创建好的“DSN”;
Ø依次“确定”、“确定”,退出对话框,结束设置。
3、使用应用程序向导创建一个“基于数据库支持”的SDI或MDI(注意:
在向导的第2步设置中必须选择“无文件支持的数据库视图”或“有文件支持的数据库视图”);同时,单击“数据源”按钮,进入下层对话框。
Ø在ODBC下拉列表中选取以前创建的“DSN”,单击“确定”,进入下层;
Ø在“选择数据库表名称”对话框中,选取指定“表名”,单击“确定”;
Ø单击“完成”,返回第2步;
Ø向导的其它步骤缺省,编译运行。
完成程序框架的创建。
4、创建“浏览数据库记录”的对话框。
⏹通过以上步骤,MFC自动为用户创建了浏览数据库记录的工具按钮和“记录”主菜单项,但要想在视图中看到数据库的记录,则需要进一步添加对话框控件,使之与数据表的字段相关联。
操作如下:
Ø切换到“ResourceView”标签页,定位并打开表单视图类的对话框资源IDD_EX_ODBC_FORM;
Ø为对话框添加相关控件(如:
P209上图表);
Ø打开“类向导”对话框,切换到“成员函数”标签页,选择“用户视图类”,一一为以上“控件”添加相关联的数据成员;(注意:
这里的数据变量已经自动被设置好了,用户只需要从下拉列表中选择即可);
Ø编译并运行,即可在视图中实现数据库表的浏览。
25.简述利用ActiveX控件浏览后台数据库的方法
(1)MSFlexGrid控件
可以直观地显示数据库表网格,只要控件设置得足够大,则库表的所有记录都可同时显示出来。
(2)添加RemoteData、DBGrid控件的方法
与前述控件不同,这两个控件一般是配合成双使用的。
其最大好处在于不需要添加任何实现代码,即可使数据库表记录显示于控件当中。
三、短代码编程
1.用C++语言设计一个有关学生学籍的结构体变量
在新建立的类的头文件中定义结构体类型:
Private:
Structxueji
{
CStringxuehao;
CStringname;
CStringsex;
CStringminzu;
CStringjiguan;
CStringbirthday;
}
2.用C++语言设计一段有关画笔声明与应用的代码样例
CPen*pPenOld,PenNew;
PenNew.createPen(Penstyle,PenWidth,PenColor);//(PS_DOT,1,RGB(255,0,0))
pPenOld=pDC—>SelectObject(&PenNew);
pDC->SelectObject(pPenOld);//恢复系统原来的GDI
PenNew.DeleteObject();
3.用C++语言设计一段有关画刷声明与应用的代码样例
//定义变量
CBrush*pBrushOld,BrushNew;
//创建画刷
A))BrushNew.CreateSolidBrush(RGB(255,0,0));//创建纯色画刷
B))BrushNew.CreateHatchBrush(HS_CROSS,RGB(255,0,0));//创建交叉阴影线画刷
C))BrushNew.CreatePatternBrush(&bmp);//创建图案画刷
//选择创建的画刷
pBrushOld=pDC->SelectObject(&BrushNew);
4.编写一段在新建状态栏窗格显示鼠标点位坐标值的C++代码
在View菜单栏下选择ClassWizard,类名选择CView,然后Messages选择WM_MOUSEMOVE,单击AddFunction按钮,然后EditCode,然后添加如下代码即可实现:
CClientDCdc(this);//建立设备文本
OnPrepareDC(&dc,NULL);//设备映射处理
dc.DPtoLP(&point);//鼠标指针转换
chartext[128];
CStatusBar*pStatus=(CStatusBar*)
GetParent()->GetDesce