23.下面描述中表达错误的(B)
A.公有继承时基类中的public成员在派生类中仍时public
B.公有继承时基类中的private成员在派生类中仍时private
C.公有继承时基类中的protected成员在派生类中仍时protected
D.私有继承时基类中的public成员在派生类中是private
24.一下时关于鼠标的消息类型,表示按下鼠标左键的时(B)
A.WM_MBUTTONDOWNB.WM_LBUTTONDOWN
C.WM_LBUTTONBLCLKD.WM_MBUTTONBLCLK
25.设置虚基类的目的是(B)
A.简化程序B.消除二义性
C.提高运行效率D.减少目标代码
26、关键字(C)说明对象或变量初始化后不会被修改
A.staticB.publicC.constD.inline
27.内联函数执行起来比标准函数(B)
A.更慢B.更快C.次数更多D.以上都不是
28.通常的拷贝构造函数的参数是(C)
A.某个对象名B.某个对象成员名C.某个对象的引用D.某个对象的指针名
29.对于动态分配内存空间描述正确的(D)
A.使用new运算符分配的内存空间的长度必须是常量
B.delete运算符可以释放动态的存储空间和静态的存储空间
C.由new分配的内存空间是不连续的
D.delete运算符只能释放由new分配的动态存储空间
30.下列关于成员函数的描述中,不正确的是(B)
A.成员函数可以重载B.成员函数一定是内联函数
C.成员函数可以时静态的D.成员函数可以设置参数的默认值
31.下列关于this指针描述中,正确的是(B)
A.任何与类相关的函数都友this指针B.类的成员函数都有this指针
C.类的友元函数都有this指针D.类的非静态成员函数才有this指针
32、下列关于构造函数的描述中,不正确的是(C)
A.构造函数的函数名与类名相同B.构造函数可以重载
C.构造函数必须制定函数类型D.构造函数可以设置参数的默认值
33.在保护继承中,基类的私有成员变成派生类的(A)
A.不可访问成员B.私有成员C.保护成员D.共有成员
34.下列重载为友元函数的运算符函数原型中,不正确的是(C)
A.Xoperator+(X,X);B.Xoperator-(X);
C.X&operator=(X&,X);D.X&operator+=(X&,X);
35.运行时的多态性指(B)
A.用指向对象的基类指针或引用一个纯虚函数
B.用指向对象的基类指针或引用一个虚函数
C.以任何方式调用一个纯虚函数D.以任何方式调用一个虚函数
36.下列关于虚函数的描述中,正确的是(B)
A.从虚基类继承的函数都是虚函数B.虚函数不得是静态成员函数
C.只能通过指针或引用调用虚函数D.抽象类中的成员函数都是虚函数
37.在重载一个运算符时,其函数的参数列表中没有任何参数,这说明该运算符是(A)
A.一元成员运算符B.二元成员运算符
C.一元友元运算符D.二元友元运算符
38、在下列函数原型中,可以作为类A构造函数的是(D)
A.voidA(int)B.intA
C.A(int)constD.A(int)
39.有inta=10;int&b=a;a=20;b=10;则cout<
A.10,20B.20,20C.20,10D.10,10
40.假设一个对象数组为a[N],当释放该数组时,系统自动调用该对象所属类的析构函数次数是(C)
A.1次B.N-1次C.N次D.不确定
41.对于AB类,基于拷贝构造函数的原型(D)
A.AB:
:
AB();B.AB:
:
AB(AB);
C.AB:
:
AB(AB&);D.AB:
:
AB(constAB&);
42.关于内联函数不正确的说法是(D)
A.内联函数定义时加关键字inlineB.可消除宏定义的不安全性
C.增加了代码长度D.降低了运行速度
43.对于静态数据成员,其初始化一般定义在(C)
A.main()函数中B.类声明中
C.main函数之前类声明之后D.类声明之前,main()函数之后
44、以下运算中即可以重载为类的成员函数,又可以重载为类的友元的是(D)
A.=B.()C.[]D.++
填空题
1.使用VC++的AppWizard创建的典型SDI应用程序的4个MFC基类是:
应用程序类、文档类、视图类、框架窗口类
2.使用MFCAPPwizard产生的应用程序的类型主要包括单文档、多文档和基于对话框的文档。
3、库模块分为静态链接库和动态链接库两类。
4.面向对象的三大特性是__封装性____,继承性和多态性
5.在进行绘图时,画刷用于指定图形的填充样式,画笔用于指定图形的边框样式。
6.文档序列化主要分为两个部分,它们是读文件和写文件。
7.含有纯虚函数的类称为抽象类。
8、消息和事件是Windows程序设计的核心概念。
9.类的访问权限有公有,保护和私有3种。
10.类实现了面向对象程序设计的封装特性。
11.一个类和对象的关系,正如基本数据类型与该类型的变量一样,如intx;
12.当在类的外部定义成员函数时,必须在函数名前加上_类名和作用域运算符(:
:
)
13.构造函数是在对象被创建是自动执行,对象消失时自动执行的成员函数析构函数。
++提供的多继承机制允许一个派生类继承多个基类,即使这些基类是相互无关的
15.友元可以是函数,也可以是其他的类函数。
16.设a和b是两个整型变量,我们用a+b的形式求这两个变量的和;设c和d为浮点型变量,我们用c+d的形式来求这两个变量的和。
显然运算符“+”具有不同的用途,这是运算符重载的例子
17.对话框主要由对话框资源和对话框类组成,对话框可分成模式和无模式2种类型。
18.标准控件为静态控件、编辑框、按钮、列表框、组合框和滚动条六种。
19.在C++中,函数的参数类型有2种传递方式,它们是值传递和地址/指针/引用传值。
20.当一个成员函数被调用时,该成员函数的this指针指向调用它的对象。
21、拷贝构造函数使用引用作为参数初始化创建的同类中的对象。
23.在派生类中不能访问基类的私有成员,这符合面向对象程序设计的封装思想。
24.使用String类之前,需要包含String头文件。
25.若有chara[80];则cin>>a表示从键盘上读入一个字符串到数组a中。
26.若希望用一个已有对象来构造另一个同类型的对象,可以使用拷贝构造函数来实现。
27.重载运算符的含义必须清楚,不能有二义性。
++的I/O是以字符流的形式实现的,每个C++编译系统都带有一个面向对象的输入/输出软件包,这就是I/O流类库.
简答题
1.一个windows下的应用程序具有哪些特点?
答:
消息驱动机制;图形设备接口(GDI);基于资源的程序设计;动态链接库;进程和线程。
2.什么是消息映射?
消息映射与消息处理函数间的关系是什么?
答:
消息映射就是将消息或命令发送到程序员为处理消息所编写的函数中,使其对消息进行处理。
消息处理函数指的是与某个消息对应的函数。
消息处理函数的执行是由其对应的消息引发的,某个类对象中的消息处理函数是与这个类对象能够得到的一个消息对应的,当这个消息发生时,这个函数就会被执行。
程序的入口点是什么函数?
它主要完成什么功能?
答:
入口点是WinMain函数。
完成的功能是创建、注册和显示窗口等一些初始化工作,启动消息循环完成消息驱动。
4.什么是文档?
什么是视图?
答:
文档:
能够交流的,便于理解的结构化、规范化的信息。
(或:
描述软件开发过程和使用方法的信息)
视图:
一个视图是一个没有边框的窗口,它在文档和用户之间起中介作用,只负责实现和修改文档数据,不负责存储。
5.简述文档类与视图类的相互关系。
答:
每一个文档可以有多个视图,但每个视图只能对应一个确定的文档。
6.文档类在文档视图结构中主要完成哪些任务?
答:
文档的任务是对数据进行管理和维护,在VC++中,文档类通过一个成为串行化(Serialize)的过程将数据保存到磁盘文件或数据库中,另外,它还可以处理命令消息。
7.模式对话框和无模式对话框的区别?
P175
答:
模式对话框是指当对话框被弹出,用户必须在对话框中作出相应的操作,在退出对话框之前,对话框所在的应用程序的其他操作不能继续执行。
无模式对话框是指当对话框被弹出后,一直保留在屏幕上,用户可继续在对话框所在的应用程序中进行其他操作;当需要使用对话框时,只需像激活一般窗口一样单击对话框所在的区域即可激活。
8.什么是消息?
Windows应用程序有哪几种消息?
各自有什么特点?
P157
答:
消息用于描述某个事件发生的信息。
有以下三种消息及特点:
窗口消息(Windowsmessage),主要指由WM开头的消息(WM_COMMAND除外),一般由窗口类和视图类对象来处理;
控件的通知消息(Controlnotifications),当控件状态发生改变(例如用户在控件中进行输入)时,控件就会向其父窗口发送WM_COMMAND通知消息;
命令消息(Commandmessage),主要包括由用户交互对象(菜单、工具条的按钮、快捷键等)发送的WM_COMMAND通知消息。
9.文档模板的作用?
如何创建一个单文档模板?
P250P251
答:
用MFCAppWizard创建的单文档(SDI)和多文档(MDI)应用程序均应包含应用程序类、文档类、视图类和框架窗口类,这些类是通过文档模板有机的联系在一起的。
新建文档模板:
pDocTemplate=newCMultiDocTemplate(
IDR_EX_MDITYPE,么叫文档序列化?
P256
答:
将文档类中的数据成员变量的值保存在磁盘文件中,或者将存储的文档文件中的数据读取到相应的成员变量中,这个过程称为文档序列化(Serialize)。
11.什么是设备坐标?
什么是逻辑坐标?
设备坐标系中有哪几种坐标系?
设备坐标系:
是面向打印机或显示器等物理设备的坐标,以像素点或设备所能表示的最小长度为单位:
X轴的正方向从左到右,Y轴的正方向从上到下。
逻辑坐标系:
是面向设备环境的坐标系,这种坐标不考虑具体的设备类型,而在实际绘图时,windows会根据当前设置的映射模式,将逻辑坐标系转换为设备坐标。
设备坐标系中有:
屏幕坐标系、窗口坐标系和客户区坐标系3种。
程序阅读题:
1.for循环语句。
voidfun(int&);
voidmain()
{for(inti=0;i<10;i++)
{fun(i);
Cout<
Cout<}
voidfun(int&n)
{n++;}
2.看程序写结果
(1):
#include<>
classA
{
public:
A(inti,intj){a=i;b=j;}
voidmove(intx,inty)
{a+=x;b+=y;}
voidshow(){cout<<”(”<private:
inta,b;
};
classB:
privateA
{
public:
B(inti;intj;intk;intl):
A(i,j){x=k;y=l;}
voidshow(){cout<voidfun(){move(3,6);}
voidf1(){A:
:
show();}
private:
intx,y;
};
voidmain()
{Ae(1,2);
();
Bd(5,6,7,8);
();
();
();
}
输出结果为:
(1,2)
7,8
(8,12)
3.看程序写结果
(2):
#include<>
classA
{inta,b;
public:
A(intx,inty){a=x;b=y;}
virtulvoiddisp(){cout<
“**A**”<;
cout<};
classB:
publicA
{intc;
public:
B(intxinty,intz)?
:
A(x,y){c=z?
;}
voiddisp(){cout<
”**B**”<;
cout<<”c=”<}?
;
voidmain()
{Aobj1(60,60),*p?
;
Bobj2(20,30,40)?
;
P=&obj1?
;
p->disp()?
;
p=&obj2?
;
p->disp()?
;
}
输出结果为:
**A**
60,60
**B**
C=40
4.看程序写结果(3):
#include<>
classA
{inta;
public:
A(intaa=0){a=aa;}
~A(){cout<<”DestructorA!
”<};
classB
{intb;
public:
B(intaa=0;intbb=0):
A(aa){b=bb;}
~B(){cout<<”DestructorB!
”<
};
voidmain(){Bx(6),y(7,8)?
;程序写结果(4):
#include<>
classA
{
public:
A();
A(inti,intj);
~A(){cout<<”Donstructor.\n”;}
voidprint();
ptivate:
inta,b;
};
A?
:
:
A()
{a=b=10;Cout<<”Defaultconstructor:
\n;”}
A?
:
:
A(inti,intj)
{a=i;b=j;cout<<”Constructor.\n”;}
voidA:
:
print()
{cout<<”a=”<voidmain()
{
Am,n(15,18);
();
();
}