执行的结果是____ch=d______。
5、C++中函数的参数传递一种是按值传递,另一种是地址传递或_引用____传递。
6、C++运行时的多态性通过虚函数来实现,而编译时的多态性通过函数重载来实现。
7只读成员函数用____const_________关键字标识,内联成员函数用_______inline____关键字标识。
8、classtest{
public:
staticintx;
};
testt1,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、在进行绘图时,画刷用于指定图形的填充样式,_____画笔_______用于指定图形的边框样式。
17、组合框与列表框用途类似,它是由__列表框________和__编辑框________功能组合而成。
18、DC是Windows应用程序与设备驱动程序和输出设备之间的接口。
19、如果一个类中含有纯虚函数,则称该类为___抽象基类_________
20、如果类的所有对象共享一个成员,则称该成员为__静态成员___________
21、如果类中的成员只能被本类的成员函数和友元函数访问,则这些成员的访问权限为__私有_______;如果类中的成员能够被类外的函数访问,则这些成员的访问权限为:
____公有______。
22、用户按下键盘按键并放开的过程中,将产生至少三条消息:
WM_KEYDOWN,WM_CHAR,WM_KEYUP
23、单选按钮初始化要使用函数如下:
voidCheckRadioButton(IDC_RADIO1,IDC_RADIOn,IDC_RADIOm)
其功能的具体描述为:
_从IDC_RADIO1到IDC_RADIOn,中设置IDC_RADIOm为默认
24、列表框分为单选列表框和多选列表框两种,中任一时刻只能选择一项,则可以选取多项。
三选择填空题(每空1分,共15分)
1、如果在基类和派生类中都包含其他类的对象(即有对象成员),则在创建派生类的对象时,首先执行⑴A的构造函数,接着执行⑵C的构造函数,然后执行___⑶_B__的构造函数,最后才执行⑷D的构造函数。
A、基类的对象成员B、派生类的对象成员
C、基类D、派生类
2、[5]B代表窗口客户区的显示设备上下文,[6]C代表整个窗口的显示设备上下文。
A、CPaintDCB、CClientDCC、CWindowDCD、CMetaFileDC
3、消息循环的处理过程如下:
⑺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、GetPos
E、SetScrollPosF、GetScrollPosG、GetScrollRange
6、所有的文档类都派生于[5]C,所有的视图类都派生于[6]A。
A、CViewB、CWindowC、CDocumentD、CFormView
7、[7]C包括键盘和鼠标的输入。
这一类消息首先放在系统消息队列中,然后由Windows将它们送入应用程序消息队列中,由程序来处理消息;D[8]用来与Windows的控制对象,如列表框、按钮、复选框等进行双向通信。
当用户在列表框中改动当前选择或改变了复选框的状态时发出此类消息。
A、系统消息B、用户消息C、输入消息D、控制消息
8、使用[9]B获取的设备上下文在退出时,必须调用ReleaseDC()释放设备上下文。
A、GetWindowRect()B、GetDC()
C、BeginPaint()D、GetClientRect()
9、在进行绘图时,[16]A用于指定图形的填充样式,___[17]_B__用于指定图形的边框样式。
A、画笔B、画刷C、区域D、位图
10、列表框ClistBox类的成员函数___[18]A__用来向列表框增加列表项,成员函数___[19]C__用来清除列表项所有项目,成员函数___[20]F__用来返回列表框的列表项的总数。
A、AddStringB、DeleteStringC、ResetContent
D、FindStringE、GetCurSelF、GetCount
11、如果类中的成员只能被本类的成员函数和友元函数访问,则这些成员的访问权限为___[16]B_;如果类中的成员能够被类外的函数访问,则这些成员的访问权限为:
___[17]C__。
A、protectedB、privateC、publicD、static
12、列表框分为[18]B和[19C]两种,[20]B中任一时刻只能选择一项。
A、组合框B、单选列表框C、多选列表框D、编辑框
六、程序设计题(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显示出来。
写出加法按钮对应的代码。
voidCExDlg:
:
OnButton1()
{UpdateDate(TRUE);1分
m_result=m_op1+m_op2;2分
UpdateDate(FALSE);1分
}
2、为学员信息设计一个类CStudent,包含:
学号、姓名、出生日期、家庭住址、班级,并使该类可以实现串行化。
请写出可以实现要求的CStudent.h和CStudent.cpp文件的内容
2、//CStudent.h
classCStudent:
publicCObject{1分
public:
CStringNum;
CStringName;
CTimeBirth;
CStringAddress;
CStringGrade;2分
DECLARE_SERIAL(CStudent)//使对象可串行化1分
virtualvoidSerialize(CArchive&ar);//重载串行化函数1分
};
//CStudent.cpp
IMPLEMENT_SERIAL(CStudent,CObject,0)1分
voidCStudent:
Serialize(CArchive&ar)
{CObject:
:
Serialize(ar);1分
if(ar.IsStoring())
{ar<}
else
{ar>>Num>>Name>>Birth>>Address>>Grade;1分
}
}
3、下列shape类是一个表示形状的抽象类,area()为求图形面积的函数,total()则是一个通用的用以求不同形状的图形面积总和的函数。
请从shape类派生三角形类(triangle)、矩形类(rectangle)、并给出具体的求面积函数。
classshape{
public:
virtualfloatarea()=0
};
floattotal(shape*s[],intn)
{floatsum=0.0;
for(inti=0;ii++)
sum=sum+i.area();
returnsum;
}
#include1分
classtriangle:
publicshape{1分
public:
virtualfloatarea()
{
floats=(a+b+c)/2;
returnsqrt(s*(s-a)*(s-b)*(s-c));3分
}
private:
floata,b,c;1分
};
classrectangle:
publicshape{1分
public:
virtualfloatarea()
{
returna*b;2分
}
private:
floata,b;1分
};
4、创建一个记录通讯录内容的新类Caddrlist,包含:
姓名、住址、电话、出生日期,并使该类可以实现串行化。
请写出可以实现要求的CAddrlist.h和CAddrlist.cpp文件的内容
//Addrlist.h文件内容:
classCAddrlist:
publicCObject{1分
public:
CStringName;
CStringAddress;
CStringTel;
CTimeBirth;
CAddrlist();3分
DECLARE_SERIAL(CAddrlist)//使对象可串行化1分
virtualvoidSerialize(CArchive&ar);//重载串行化函数1分
};
//Addrlist.cpp文件内容:
IMPLEMENT_SERIAL(CAddrlist,CObject,0)1分
voidCAddrlist:
:
Serialize(CArchive&ar)
{CObject:
:
Serialize(ar);1分
if(ar.IsStoring())
{ar<}
else
{ar>>Name>>Tel>>Address>>Birth;1分
}
}
1、(10分)已知点类的定义如下:
classPoint{
……
private:
doublex,y;
};
分别用成员函数和友元函数实现计算两点间的距离,函数名为distance。
用成员函数实现(5分)
doublePoint:
:
distance(constPoint&a)
{doubledx,dy;
dx=x-a.x;
dy=y-a.y;
returnsqrt(dx*dx+dy*dy);
}
用友元函数实现(5分)
doubledistance(constPoint&a,constPoint&b)
{doubledx,dy;
dx=a.x-b.x;
dy=a.y-b.y;
returnsqrt(dx*dx+dy*dy);
}
5、(15分)要求计算立方体和圆柱2个几何体的表面积和体积。
可以抽象出一个公共的基类Base,把它作为抽象类,在该类内定义求表面积和体积的纯虚函数(抽象类本身是没有表面积和体积可言的)。
由这个抽象类派生出描述立方体和圆柱的2个具体类,在这2个类中都有计算表面积和体积的函数的自己版本。
请用C++语言定义上述类等级。
constdoublePI=3.14159;
classBase{
public:
virtualdoublearea()const=0;
virtualdoublevolume()const=0;
};
classCube:
publicBase{
public:
Cube(doublel=10)
{length=l>0?
l:
10;}
doublearea()const
{return6*length*length;}
doublevolume()const
{returnlength*length*length;}
private:
doublelength;
};
classCylinder:
publicBase{
public:
Cylinder(doubler=10,doubleh=5)
{radius=r>0?
r:
10;
height=h>0?
h:
5;
}
doublearea()const
{return2*PI*radius*radius+2*PI*radius*height;}
doublevolume()const
{returnPI*radius*radius*height;}
private:
doubleradius;
doubleheight;
};
6、(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分)
voidCExDlg:
:
OnButtonMul()//乘法按钮
{UpdateDate(TRUE);
m_z=m_x*m_y;