C考试试题重点Word下载.docx
《C考试试题重点Word下载.docx》由会员分享,可在线阅读,更多相关《C考试试题重点Word下载.docx(25页珍藏版)》请在冰点文库上搜索。
的公有或保护成员在派生类中仍为公有或保护成员。
public派生最常用,可以在派生类的成员函数中访问基类的非私有成员,可通过派生类的对象直接访问基类的公有成员。
⑵采用private私有派生,基类所有的公有和保护成员在派生类中都成为私有成员,只允许在派生类的成员函数中访问基类的非私有成员。
private派生很少使用。
⑶采用protected保护派生,基类所有的公有和保护成员在派生类中都成为保护成员,只允许在派生类的成员函数和该派生类的派生类的成员函数中访问基类的非私有成员。
11.派生类构造函数和析构函数执行的次序是怎样的?
派生类构造函数的执行次序:
首先,调用基类构造函数,调用顺序按照它们被继承时声明的基类名顺序执行;
其次,调用内嵌对象构造函数,调用次序为各个对象在派生类内声明的顺序;
最后,执行派生类构造函数体中的内容。
派生类析构函数执行过程与构造函数执行过程相反。
即当派生类对象的生存期结束时,首先调用派生类的析构函数,然后调用内嵌对象的析构函数,再调用基类的析构函数。
12.什么叫虚基类?
有什么作用?
在多重继承中,如果多条继承路径上有一个公共的基类,则在这些路径的汇合点上的派生类会产生来自不同路径的公共基类的多个拷贝,如果用virtual把公共基类定义成虚基类,则只会保留公共基类的一个拷贝。
引进虚基类的目的是为了解决二义性问题,使得公共基类在它的派生类对象中只产生一个基类子对象。
13.什么是多态性,在C++中是如何实现多态的?
多态是指同样的消息被不同类型的对象接收时导致完全不同的行为,是对类的特定成员函数的再抽象。
C++支持的多态有多种类型,重载(包括函数重载和运算符重载)和虚函数是其中主要的方式。
14.什么是抽象类,其有何作用?
抽象类的派生类是否一定要给出纯虚函数的实现?
含有纯虚函数的类称为抽象类。
抽象类的主要作用是通过它为一个类族建立一个公共的接口,使它们能够更有效地发挥多态特性。
抽象类声明了一组派生类共同操作接口的通用语义,而接口的完整实现,即纯虚函数的函数体,要由派生类自己给出,抽象类只能作为基类被继承使用。
抽象类的派生类不一定要给出纯虚函数的实现,没有给出纯虚函数的实现的派生类仍然还是抽象类。
15.在C++中能否声明虚构造函数,为什么?
能否声明虚析构函数,有什么作用?
在C++中不能声明虚构造函数。
多态是不同的对象对同一消息有不同的行为特性,虚函数作为运行过程中多态的基础,主要是针对对象的,而构造函数是在对象产生之前运行的,因此虚构造函数是没有童义的。
在C++中可以声明虚析构函数。
析构函数的功能是在该类对象消亡之前进行一些必要的清理工作,如果一个类的析构函数是虚函数,那么,由它派生而来的所有子类的析构函数也是虚函数。
析构函数设置为虚函数之后,在使用指针引用时可以动态联编,实现运行时的多态,保证使用基类的指针就能够调用适当的析构函数对不同的对象进行清理工作。
二、填空题
1.拷贝构造函数使用______作为参数初始化创建中的对象。
2.在C++中,对于构造函数和析构函数来说,______是可以重载的,而______是不可以重载的。
。
______类的对象时构造函数的调用顺序为B则生成a,类的成员A类中包含一个B.3.
4.类的每一个成员函数(静态成员函数除外)都有一个隐含的参数,叫做______。
假设类名为A,则该参数的类型为______。
5.类的静态成员分为______和______。
6.声明友元的关键字是______。
7.如果类A继承了B,则类A称为______,类B称为______。
8.派生类对基类的继承有三种方式:
______、______和______。
9.如果只想保留公共基类的一个拷贝,就必须使用关键字________把这个公共基类定义为虚基类。
10.派生类的成员有两种来源,即______和______。
11.要想访问基类的private成员变量,只能通过基类提供的______进行间接访问。
12.重载运算符应仍保持其原有的操作数个数、结合性和______。
13.对于双目运算符,若重载为类的成员函数,有______个参数;
若重载为友元函数,则有______个参数。
14.后缀?
尫重载为类的成员函数(设类名为A)的形式为______,重载为类的友元函数(设类名为A)的形式为______。
15.设有一时间类Time,现欲用成员函数方法重载运算符+,实现一个时间与一个整数的相加运算,所得结果为一个新时间,则成员函数的声明语句为______。
16.C++语言支持的两种多态性分别是编译时的多态性和______的多态性。
17.联编有两种方式,即______和______。
18.抽象类必须至少包含一个______。
21.Windows系统中消息的主要类型有______、______和______。
22.当用户在窗口中按下鼠标左键时,Windows系统就会自动发送______消息给该窗口,如果程序要对此消息作出反应,则程序中应包含类似______函数。
23.OnDraw()函数有一个指向______类的指针参数,通过该参数可以直接向视图输出。
24.应用程序将任何东西画到设备中之前,必须明确索取一个______。
25.对话框分为______和______两种。
26.对话框的初始化工作一般在______和______中完成。
27.MFC中公用对话框有______、______、______、______和______。
28.视图派生类可以选择______类作其基类,可以实现文本编辑功能。
29.对于文档类,数据成员的初始化工作是在______函数中完成的。
30.如果修改了文档类中的数据,并要求重新显示,要用______或______发出重画消息,引起对OnDraw()的调用。
31.当执行cout语句输出endl数据项时,将使C++显示输出屏幕上的光标从当前位置移动到______的开始位置。
32.假定x和y为整型,其值分别为16和5,则a/y和double(x)/y的值分别为______和
______。
33.strlen(“apple”)的值为______。
34.C++程序运行时的内在空间可以分为全局数据区,堆区,栈区和______区。
35.假定a是一个一维指针数组,则a+i所指对象的地址比a大______字节。
36.如果一个派生类只有一个唯一的基类,则这样的继承称为______。
37.假定AA是一个类,“AA*abc()const;
”是该类中的一个成员函数的原型,在该函数体中______向*this或其成员赋值。
38.假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为______。
该构造函数实现对数据,”aa){a=aa;
}AB(int定义了一个构造函数“AB假定用户为类39.
______的初始化。
40.作为类的成员函数重载地个运算符时,参数表中只有一个参数,说明该运算符有______个操作数。
41.C++有两种联编方式,其中在程序编译时的联编叫做______联编
42.虚函数可以是另一类的______函数
43.定义虚函数需要用______关键字
44.将函数“voidvf()”定义为纯虚数的格式是virtualvoidvf()______
45.拥有纯虚函数的类就是______,该类不能产生类的实例
46.派生类没有重载基类的纯虚函数,则此派生类也是______
47.有如下程序
#include<
iostream.h>
classCSAI_A
{
public:
virtualvoidfun(){cout<
<
A;
}
};
classCSAI_B:
publicCSAI_A
virtualvoidfun(){CSAI_A:
:
fun();
cout<
B;
voidmain()
{CSAI_A*p=newCSAI_B;
p->
deletep;
执行这个程序的输出结果是()答案:
______
48.有如下程序
#include<
constintT=8;
voidmain()
{
inti,s=0;
for(i=1;
i<
=T;
i++){
s+=i*i;
cout<
s<
'
'
;
}
endl;
运行结果:
49.有如下程序
intff(intx,inty){
intz;
x<
+'
y<
='
cin>
>
z;
if(x+y==z)return1;
elsereturn0;
函数功能:
50.有如下程序
char*f(char*s){
intn=strlen(s);
char*r=newchar[n+1];
for(inti=0;
n;
i++)
if(s[i]>
a'
&
&
s[i]<
z'
)r[i]=s[i]-'
A'
elser[i]=s[i];
r[n]='
\0'
returnr;
51.C++虚函数有两种调用方式,分别是______和多态调用方式
52.当运算符重载为成员函数时,对象本身就是______,不在参数表中显示地出现。
53.若以成员函数形式,为类CSAI重载“double”运算符,则该运算符重载函数的原则是______
54.在表达式“x+=y”中,“+=”是作为非成员函数重载的运算符,若是使用显式的函数调用代替直接使用运算符“+=”,这个表达式还可以表示为______
55.将运算符“>
”重载为类CSAI的友元函数的格式是:
friendinstream&
operator>
56.this指针______破坏类的封装性。
57.通过指向基类的指针调用派生类对象的函数时,采用______调用。
58.下面是对按从小到大排列的有序数组a[n]中进行二分查找x的算法,若查找成功返回该元素的下标,否则返回-1。
intBinnarySearch(inta[],intn,intx)
intlow=0,high=n-1;
//定义并初始化区间下界和上界变量
intmid;
//定义保存中点元素下标的变量
while(low<
=high){
mid=(low+high)/2;
if(x==a[mid])______
elseif(x<
a[mid])high=mid-1;
else______
return-1;
59.请补充完整如下的类定义:
#include<
string.h>
classA{
char*a;
A(){a=0;
}//定义无参构造函数,使A的值为空
A(char*aa){
//进行动态存储分配a=______;
//用aa所指字符串初始化a所指向的动态存储空间strcpy(a,aa);
//定义析构函数,删除a所指向的动态存储空间;
______};
三、编程题1.创建一个Employee类,该类中有字符数组表示姓名、街道地址、市、省和邮政编码。
把表示构造函数、ChangeName函数、Display函数的函数原型放在类定义中,构造函数初始化每个成员,Display函数把完整的对象数据打印出来。
其中的数据成员是保护的,函数是公共的。
2.设计并测试类Point,其数据成员是直角坐标系的点坐标。
友元函数distance用来计算两点间的距离。
3.定义一个Rectangle类,有宽width、长length等属性,重载其构造函数Rectangle、Rectangle(intwidth,intlength)。
4.编写一个程序,设计一个Cdate类,它应该满足下面的条件。
⑴用这样的格式输出日期:
日-月-年。
⑵输出在当前日期上加两天后的日期。
⑶设置日期。
5.按照下面函数原型语句编写一个递归函数求出并返回数组a中n个元素的平方和。
intf(inta[],intn)
6.根据下面类中Sum函数成员的原型和注释写出它的类外定义。
classAA{
int*a;
intn;
intMS;
public:
voidInitAA(intaa[],intnn,intms){
if(nn>
ms){cout<
Error!
exit
(1);
MS=ms;
a=newint[MS];
i++)a[i]=aa[i];
intSum();
//求出并返回数组a中前n个元素之和
7.定义一个基类有姓名、性别、年龄,再由基类派生出教师类和学生类,教师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩。
8.下列Shape类是一个表示形状的抽象类,area()为求图形面积的函数,total()则是一个通用的用以求不同形状的图形面积总和的函数。
请从Shape类派生三角形类(Triangle)、矩形类(Rectangle),并给出具体的求面积函数。
classShape{
virtualfloatarea()=0;
floattotal(Shape*s[],intn)
floatsum=0.0;
sum+=s[i]->
area();
returnsum;
9.声明一个Shape类(形状)基类,它有两个派生类:
Circle(圆)和Square(正方形),要求如下。
⑴根据给出的圆心坐标计算圆的面积。
⑵根据给出的正方形中心坐标和一个顶点坐标计算该正方形的面积。
提示:
Shape类的数据成员包括中心的坐标,Circle类和Square类由Shape类派生,Circle类新增一个数据成员,即圆的半径,Square类新增两个数据成员,即顶点坐标。
明该对话框对象已不存在了。
1.引用
2.构造函数析构函数
3.A(),B()
4.this,A*
5.静态数据成员静态成员函数
6.friend
7.派生类基类
8.public、protected、private
9.virtual
10.基类派生类自身
11.成员函数
12.运行时
13.静态联编,动态联编
14.publicvehicle,publicvehicle
15.基类A中的成员函数.
派生类B中的成员函数.
16.C类B类
17.抽象函数
18.优先级2.12
19.Aoperator++(int)friendAoperator++(A&
int)
20.TimeTime:
operator+(int)
21.输入消息、控制消息、系统消息、用户消息
22.WM_LBOTTONDOWNOnLButtonDown
23.CDC
24.设备环境
25.模态对话框非模态对话框
26.构造函数OnInitDialog()函数
27.CColorDialog、CFileDialog、CFindReplaceDialog、CFontDialog、CPrintDialog
28.CeditView
29.OnNewDocument()
30.Invalidate()或InvalidateRect()
31.下一行
32.3和3.2
33.5
34.代码
35.4×
i
36.单继承
37.不能够
38.AB()
39.a
40.2
.静态41.
42.友元
43.virtual
44.=0
45.抽象类
46.抽象类
47.AB
48.1514305591140204
49.输入2个整数相加的结果,结果正确返回1,否则返回0
50.将字符串中的小写字母转换为大写
51.非多态调用
52.第一操作数
53.operatrodouble()
54.operator+=(x,y)
55.(istream&
CSAI&
)
56.不能
57.多态
58.returnmidlow=mid+1
59.newchar[strlen(aa)+1]~A(){delete[]a;
三、编程题
1.
classEmployee
protected:
charname[20];
charaddress[100];
charcity[20];
charprovince[20];
charzipcode[10];
Employee(char*nm,char*addr,char*city,char*prov,char*zip);
voidChangeName(char*newName);
char*Display(char*buffer);
Employee:
Employee(char*nm,char*adr,char*cit,char*prov,char*zip)
strcpy(name,nm);
strcpy(address,adr);
strcpy(city,cit);
strcpy(province,prov);
strcpy(zipcode,zip);
voidEmployee:
ChangeName(char*newName)
strcpy(name,newName);
char*Employee:
Display(char*buffer)
strcpy(buffer,name);
strcat(buffer,address);
returnbuffer;
2.
math.h>
classPoint
private:
floatx,y;
Point(floatxx,floatyy)
{x=xx;
y=yy;
floatGetX(){returnx;
floatGetY(){returny;
friendfloatdistance(Point&
Point&
);
floatdistance(Point&
a,Point&
b)
floatdx=a.x-b.x;
floatdy=a.y-b.y;
用友元函数distance().显示两点的坐标:
\n;
a.x<
<
a.y<
<
b.x<
b.y<
returnsqrt(dx*dx+dy*dy);
floatd;
Pointp1(10.5,20.5