deletearr;//释放动态数组所占空间,就用delete[]arr;
}
2-44.请写出编译预处理后所得到的源代码.并给出程序运行结果?
#include
#defineMAX100
voidmain()
{
cout<<”Thispartiscomplied.”;
}
结果:
Thispartiscomplied.
3-2什么是对象?
什么是类?
简述对象与类之间的关系?
答:
在计算机科学中将这些现实世界中的事物称之为对象。
对象是包含现实世界中事物特征的抽象实体,它反映了系统为之保存信息和与之交互的方法。
类是具有相同数据结构(属性)和相同操作功能(行为)的对象的集合,它规定了这些对象的公共属性和行为方法。
类=数据结构+对这些数据进行操作的函数
类是对象的模板,对象是类的一个实例.
3-6在C++中如何定义类?
如何实现定义的类?
如何利用类声明对象?
答:
class<类名>
{
private:
<私有数据成员和私有成员函数的声明列表>;
public:
<公有数据成员和公有成员函数的声明列表>;
protected:
<保护数据成员和保护成员函数的声明列表>;
};
类的实现实质上是类的成员函数的实现,即定义类的成员函数。
定义并实现了类,就可以利用定义好的类来声明对象,即创建对象。
对象是类的一个实例,声明对象的形式与声明普通变量类似,例如:
Timet1,today;
Time*pt1=&t1;
2-40写出下列程序运行的后输出结果?
答:
14:
52:
66
第四篇:
3-7类的成员的访问控制权限有哪几种?
请说明它们分别有什么作用?
答:
3种:
private、public和protected称为访问权限控制符.
区别:
private属性表示数据成员和成员函数是类的私有成员,它们只允许被本类的成员函数访问或调用.
public属性表示数据成员和成员函数是类的公有成员,它们允许被本类或其它类的成员函数(通过对象)访问或调用,是类的外部接口
3-8何谓构造函数?
何谓析构函数?
请说明其作用?
答:
构造函数是一种特殊的成员函数,它是在创建对象时系统自动调用的成员函数,其作用是进行对象的初始化工作.
析构函数也是一种特殊的成员函数,它是在对象生存期即将结束时系统自动调用的成员函数。
其作用是在对象被删除前做一些清理或数据保存工作.
3-11什么是this指针?
它有什么作用?
答:
this指针是一个特殊的隐藏在成员函数中的指针,用于指向调用成员函数的对象。
3-12何谓友元函数?
何谓友元类?
简述友元函数的定义和使用方法?
答:
C++提供了一种函数,它虽然不是一个类的成员函数,但可以象成员函数一样访问该类的所有成员,包括私有成员和保护成员。
这种函数称为友元(friend)函数。
一个类可以声明另一个类为其友元类,这个友元类的所有成员函数都可以访问声明其为友元的类的所有成员。
一个函数要成为一个类的友员函数,需要在类的定义中声明该函数,并在函数声明的前面加上关键字friend。
友元函数本身的定义没有什么特殊要求,可以是一般函数,也可以是另一个类的成员函数。
为了能够在友元函数中访问并设置类的私有数据成员,一个类的友元函数一般将该类的对象或引用作为函数参数。
3-13类的派生方式有哪3种?
请述这3种方式的特点?
答:
派生方式决定了基类的成员在派生类中的访问权限。
派生方式共有三种:
public、private和protected(缺省值为private)。
采用public派生,基类成员的访问权限在派生类中保持不变,即基类所有的公有或保护成员在派生类中仍为公有或保护成员。
public派生最常用。
(1)可以在派生类的成员函数中访问基类的非私有成员;
(2)可通过派生类的对象直接访问基类的公有成员。
采用private私有派生,基类所有的公有和保护成员在派生类中都成为私有成员,只允许在派生类的成员函数中访问基类的非私有成员。
private派生很少使用。
采用protected保护派生,基类所有的公有和保护成员在派生类中都成为保护成员,只允许在派生类的成员函数和该派生类的派生类的成员函数中访问基类的非私有成员。
3-39程序改错.
(1)答:
去掉static,Person:
:
GetID()改为person1.GetID()
(2)答:
派生类构造函数增加:
Point(a,b)
(3)答:
去掉const
第五篇:
3-16派生类构造函数和基类构造函数之间有什么关系?
派生类构造函数调用基类构造函数有哪2种方式?
它们的调用顺序是怎样的?
答:
基类的构造函数不能被继承,派生类中对基类原有数据成员的初始化,必须由基类构造函数完成,而对派生类新增成员的初始化由派生类的构造函数进行.
当派生类对象的生存期结束时,首先调用派生类的析构函数,然后调用基类的析构函数。
隐式调用和显式调用两种方式:
先调用基类的构造函数,再调用派生类的构造函数
3-24什么是虚函数?
虚函数与成员函数的覆盖有什么异同?
答:
如果想通过基类指针调用派生类中覆盖的成员函数,只有使用虚函数。
要将一个成员函数声明为虚函数,只需在定义基类时在成员函数声明的开始位置加上关键字virtual.
虚函数采用动态联编,而成员函数覆盖则静态联编
3-27什么是抽象基类?
什么是纯虚函数?
在C++中如何定义它们?
答:
抽象类是类的一些行为(成员函数)没有给出具体定义的类,即纯粹的一种抽象。
在基类中不定义具体实现的虚成员函数称为纯虚函数。
纯虚函数的声明:
virtual<数据类型><成员函数名>(<形参表>)=0;
抽象类至少有一个纯虚函数.
3-30什么是模板?
什么是模板的类型参数?
使用模板有什么优越性?
答:
模板是一个将数据类型参数化的工具,它把“一般性的算法(代码)”和其“对数据类型的实现”区分开来,即代码不受服具体数据类型的影响。
关键字class(或typename)后面的标识符T由用户自定义,称为类型参数.
更大限度地实现了软件代码的重用.
3-31何谓函数模板?
请简述函数模板的定义和使用方法?
答:
函数模板是一种不指定某些参数的数据类型的函数,在函数模板被调用时根据实际参数的类型决定这些函数模板参数的类型。
定义了一个可对任何类型变量进行操作(求绝对值)的函数模板:
template//函数模板
Tabs(Tval)//模板函数
{
returnval<0?
-val:
val;
}
函数模板被调用时,根据实参的类型,决定类型参数.
3-32何谓类模板?
请简述类模板的定义和使用方法?
答:
为了起到模板的作用,与函数模板一样,定义一个类模板时必须将某些数据类型作为类模板的类型参数。
模板类的实现代码与普通类没有本质上的区别,只是在定义其成员时要用到类模板的类型参数。
template
classMyTemClass
{
private:
Tx;//类型参数T用于声明数据成员
public:
voidSetX(Ta){x=a;};
//类型参数T用于声明成员函数的参数
TGetX(){returnx;};
//类型参数T用于声明成员函数的返回值
};
通过在使用模板类声明对象时所给出的实际数据类型确定类型参数。
以下使用类模板声明了一个类型参数为int的模板类的对象:
MyTemClassintObject;
3-36何谓匈牙利表示法则?
m_xEnd代表一个什么类型的变量?
答:
匈牙利表示法则。
该法则要求每一个变量名都有一个前缀,用于表示变量的类型,后面是代表变量含义的一串字符。
类的成员变量,表示座标x.
第六篇
4-1VisualC++IDE提供了哪些类型的程序向导?
最常用的向导有哪几个?
答
(1)
ATLCOMAPPWizard
ClursterResourceTypeWizard
CustomAppwizard
DatebaseProject:
创建数据库项目
MFCActiveXControlWizard:
创建基于MFC的ActiveX控件
MFCAppWizard[dll]:
创建基于MFC的动态链接库
MFCAppWizard[exe]:
创建基于MFC的应用程序(最常用)
NewDatabaseWizard:
在SQL服务器上创建一个SQLServer数据库
Win32Application:
创建Win32应用程序,可不使用MFC,采用SDK方法编程
Win32ConsoleApplication:
创建DOS下的Win32控制台应用程序,采用C++或C语言进行编程
Win32Dynamic-linkLibrary:
创建Win32动态链接库,采用SDK方法
Win32StaticLibrary:
创建Win32静态链接库,采用SDK方法
(2)MFCAppWizard[exe]:
创建基于MFC的应用程序(最常用)
4-2MFCAppWizard[exe]向导建立一个SDI应用程序时,如何进一步设置程序界面窗口的边框厚度和最小化,最大化,关闭按钮?
答:
(1)
编写一个实现具体功能的MFC应用程序的步骤
1.根据应用程序特性在MFCAppWizard[exe]应用程序向导各步骤对话框中进行选择,创建一个应用程序的框架。
2.利用资源编辑器为程序编辑或添加资源,如编辑菜单、添加对话框等。
3.利用ClassWizard类向导或手工添加类、成员变量和成员函数的声明。
4.根据需要编写具体的函数代码。
5.编译、链接程序。
如果程序有语法错误,需要修改源程序。
直到没有编译、链接错误,才能得到可执行程序。
6.测试应用程序各项功能,如果程序没有实现程序设计所要求的功能,启动Debug调试器进行调试,找出并修改程序设计中的逻辑错误。
(2)略.
4-4Workspace窗口的ClassView页面中类成员左边的小图标具有什么含义?
答:
分别表示:
公有,私有,保护成员变量及公有,私有,保护成员函数
4-5利用VisualC++编写Windows应用程序可以采取哪些方法?
编写一个MFC应用程序一般有哪几个步骤?
简述向项目添加一个资源的方法.
答
(1)
利用VisualC++编写Windows应用程序可以采取几种不同的途径:
•利用Win32应用程序接口API(ApplicationProgrammingInterface)提供的函数,用C或C++语言编写程序。
•由于MFC通过类对API的绝大部分功能进行了封装,可以利用MFC,用C++语言编写程序。
(2)
•根据应用程序特性在MFCAppWizard[exe]应用程序向导各步骤对话框中进行选择,创建一个应用程序的框架。
•利用资源编辑器为程序编辑或添加资源,如编辑菜单、添加对话框等。
•利用ClassWizard类向导或手工添加类、成员变量和成员函数的声明。
•根据需要编写具体的函数代码。
•编译、链接程序。
如果程序有语法错误,需要修改源程序。
直到没有编译、链接错误,才能得到可执行程序。
•测试应用程序各项功能,如果程序没有实现程序设计所要求的功能,启动Debug调试器进行调试,找出并修改程序设计中的逻辑错误。
(3)打开Insert菜单,选择Resource菜单项,出现InsertResource对话框,如下图所示,在ResourceType框中选择一个资源类型,单击New按钮即可向项目添加一个资源。
4-8MFCAppWizard[exe]向导为SDI应用程序创建了哪几个类?
它们的基类分别是哪个?
这些类分别完成什么程序功能?
答:
CMainFrame类是MFC的CFrameWnd类的派生类,它主要负责创建标题栏、菜单栏、工具栏和状态栏。
CMysdiDoc。
CMysdiDoc类是MFC的CDocument类的派生类,它主要负责应用程序数据的保存和装载,实现文档的序列化功能
CMysdiView类是MFC的CView类的派生类,它主要负责客户区文档数据的显示,以及如何进行人机交互。
CMysdiApp类是MFC的CWinApp类的派生类,它主要负责完成应用程序的初始化、程序的启动和程序运行结束时的清理工作。
4-10在SDI应用程序中,如何进行文档对象成员变量的初始化工作?
在视图类成员函数中如何获取当前文档对象的指针?
如何访问文档对象的数据?
答:
SDI应用程序不要在构造函数中进行文档对象成员变量的初始化,而应在OnNewDocument()函数中
GetDocument():
用于获取当前文档对象的指针m_pDocument。
第七篇
5-1什么是文档?
什么是视图?
请说明文档/视图结构应用程序的界面风格?
答:
文档是是MFC应用程序中所处理数据的集合,包括文本、图形、图象和表格数据
视图是文档在屏幕上的一个映像.
文档/视图结构应用程序是一个标准的Windows程序,除了具有标准的窗口和界面元素外,还提供了一个专门的数据显示区称为客户区.
5-3文档,视图和应用程序框架之间如何相互作用?
通过哪几个主要的成员函数完成文档和视图之间的相互交互?
答:
文档与视图的交互是通过类的公有成员变量和成员函数实现的。
视图类的成员函数GetDocument()
CDocument类的成员函数UpdateAllViews()
视图类的成员函数OnUpdate()
CWnd的类成员OnPaint()
CVIEW的成员函数OnDraw()
5-10菜单命令可以映射到哪些类?
当将一个菜单命令同时映射到不同类的成员函数时,映射有效的顺序是怎要的?
答:
从类CCmdTarget派生出来的类都可以加入应用程序的消息循环.
其优先级为:
视图类->文档类->框架窗口类
5-13鼠标消息分为哪2类?
常用的鼠标消息有哪几个?
鼠标消息处理函数一般都有哪2个函数参数?
在编程时这些参数有什么用?
答:
客户区鼠标消息非客户区鼠标消息:
主要鼠标消息:
WM_MOUSEMOVE:
移动
WM_LBUTTONDOWN:
按下左键
WM_LBUTTONUP:
释放左键
WM_RBUTTONDOWN:
按下右键
WM_RBUTTONUP:
释放右键
WM_LBUTTONDBLCLK:
双击左键
一般都有两个参数:
nFlags:
类型为UINT,表示鼠标按键和键盘上控制键的状态。
point:
类型为CPoint,表示鼠标当前所在位置坐标。
第八篇:
5-8菜单的属性有哪些?
如何建立菜单?
简述添加菜单命令处理函数的方法?
答:
Pop-up;Seperator;Checked;Grayed;Inactive;
1.利用MFC