C++模拟题5文档格式.docx
《C++模拟题5文档格式.docx》由会员分享,可在线阅读,更多相关《C++模拟题5文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
C.使用作用域分辨运算符或虚基类
D.使用成员名限定或赋值兼容规则
9.在main函数中可以用p.a的形式访问派生类对象p的基类成员a,其中a是(D)
A.私有继承的公有成员
B.公有继承的私有成员
C.公有继承的保护成员
D.公有继承的公有成员
10.在C++中不返回任何类型的函数应该说明为(C)
A.int
B.char
C.void
D.double
11.若Sample类中的一个成员函数说明如下:
voidset(Sample&
a),则Sample&
a的含义是(B)
A.指向类Sample的名为a的指针
B.a是类Sample的对象引用,用来作函数Set()的形参
C.将a的地址赋给变量Set
D.变量Sample与a按位与的结果作为函数Set的参数
12.要实现动态联编必须(B)
A.通过成员名限定来调用虚函数
B.通过对象名来调用虚函数
C.通过派生类对象来调用虚函数
D.通过对象指针或引用来调用虚函数
13.在派生类中定义虚函数时,可以与基类中相应的虚函数不同的是(B)
A.参数类型
B.参数个数
C.函数名称
D.函数体
14.实现两个相同类型数加法的函数模板的声明是(D)
A.add(Tx,Ty)
B.Tadd(x,y)
C.Tadd(Tx,y)
D.Tadd(Tx,Ty)
15.下列不是描述类的成员函数的是(C)
A.构造函数
B.析构函数
C.友元函数
D.拷贝构造函数
16.继承机制的作用是(C)
A.信息隐藏
B.数据封装
C.定义新类
D.数据抽象
17.已知:
p是一个指向类A数据成员m的指针,A1是类A的一个对象。
如果要给m赋值为5,正确
的是(C)
A.A1.p=5;
B.A1->
p=5;
C.A1.*p=5;
D.*A1.p=5;
18.如果采用动态多态性,要调用虚函数的是()
A.基类对象指针
B.对象名
C.基类对象
D.派生类名
19.若有以下定义,则说法错误的是(B)
inta=100,*p=&
a;
A.声明变量p,其中*表示p是一个指针变量
B.变量p经初始化,获得变量a的地址
C.变量p只可以指向一个整型变量
D.变量p的值为100
20.C++语言建立类族是通过(B)
A.类的嵌套
B.类的继承
C.虚函数
D.抽象类
二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填上正确答案。
错填、不填均无分。
1.假设inta=1,b=2;
则表达式(++a/b)*b--的值为_2__。
2.复制构造函数使用_构造函数__作为形式参数。
3.通过C++语言中的__继承_机制,可以从现存类中构建其子类。
4.静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是__友元函数_。
5.在下面的类定义中,私有成员有_X,Y_length,height;
_。
classLocation
{intX,Y;
protected:
intzeroX,zerxY;
intSetZero(intzeroX,intzeroY);
private:
intlength,height;
public:
voidinit(intinitX,intinitY);
intGetX();
intGetY();
};
6.在C++程序设计中,建立继承关系倒挂的树应使用__单继承_继承。
7.C++支持的两种多态性分别是_静态_多态性和运行多态性。
8.C++中语句constchar*constp=“hello”;
所定义的指针p和它所指的内容都不能被__赋值_。
9.在C++中,定义虚函数的关键字是_virteor__。
10.采用私有派生方式,基类的public成员在私有派生类中是_私有__成员。
11.对赋值运算符进行重载时,应声明为_inline__函数。
12.在C++中有两种参数传递方式即值传递和_引用__传递。
13.预处理命令以_#define__符号开头。
14.在构造函数和析构函数中调用虚函数时采用_构造函数__。
15.C++是通过引用运算符___来定义一个引用的。
16.如果要把类B的成员函数voidfun()说明为类A的友元函数,则应在类A中加入语句_friendvoidB:
:
fun();
__。
17.如果要把PI声明为值为3.14159类型为双精度实数的符号常量,该声明语句是_constdoublePI3.14159__。
18.在C++四个流对象中,_cout__用于标准屏幕输出。
19.执行下列代码
inta=32;
doublec=32;
cout.setf(ios:
hex);
cout<
<
"
hex:
a="
a<
c="
c<
endl;
cout.unsetf(ios:
程序的输出结果为_hex:
a=20_,c=30_。
20.已知有20个元素int类型向量V1,若用V1初始化为V2向量,语句是vetiror<
int>
(20)___。
三、改错题(本大题共5小题,每小题4分,共20分)
1.#include<
iostream.h>
classA
{private:
public
intx;
A(inti){x=i;
}
A(){x=0;
friendintmin(A&
A&
);
intmin(A&
a,A&
b)
{return(a.x>
b.x)?
a.x:
b.x;
voidmain()
{Aa(3),b(5);
a.min(a,b)<
2.#include<
classshape
{public:
virtualintarea(){return0;
classrectangle:
publicshape
inta,b;
voidsetLength(intx,inty){a=x;
b=y;
intarea(){returna*b;
{rectangler;
r.setLength(3,5);
shapes1,*s2=&
r;
cout<
r.area()<
s2=s1;
s2.area()<
3.下面的类定义中有一处错误,请用下横线标出错误所在行并给出修改意见。
#include<
template<
classT>
{private:
Tx,y,s;
A(Ta,Tb)
{x=a,y=b;
s=x+y;
voidshow()
{cout<
x+y="
s<
{A<
add(10,100);
add.show();
4.生成具有n个元素的动态数组。
{intn;
cin>
>
n;
inta[n];
a[0]=2;
a[0]<
5.#include<
{inti;
virtualvoidfun()=0;
A(inta)
{i=a;
classB:
publicA
{intj;
voidfun()
B:
fun()\n"
;
}
B(intm,intn=0):
A(m),j(n){}
{A*pa;
Bb(7);
pa=&
b;
四、完成程序题(本大题共5小题,每小题4分,共20分)
1.在下面程序横线处填上适当字句,以使该程序执行结果为:
504342110
07.18.19.110.111.1
voidf(___Ta[],_int_n_____)
{__________;
for(inti=0;
i<
n/2;
i++)
t=a[i],a[i]=a[n-1-i],a[n-1-i]=t;
voidmain()
{inta[5]={10,21,34,4,50};
doubled[6]={11.1,10.1,9.1,8.1,7.1};
f(a,5);
f(d,6);
5;
a[i]<
"
for(i=0;
6;
d[i]<
endl;
2.完成下面类中成员函数的定义。
iomanip.h>
classArr
{protected:
float*p;
intn;
//数组大小(元素个数)
Arr(intsz=10)
{n=sz;
p=newfloat[n];
~Arr(void)
{
____delete[]p;
_____
intGetn(void)const
returnn;
float&
operator[](inti)
________
voidPrint();
voidArr:
Print()
for(i=0;
this->
Getn();
{if(i%10==0)
setw(6)<
p[i];
{Arra(20);
a.Getn();
a[i]=i*2;
a.Print();
3.下面是一个输入半径,输出其面积和周长的C++程序,在下划线处填上正确的语句。
iostream>
__usingnamespacestd;
_______;
__constdoublepi3.14159_______;
{doublerad;
rad="
rad;
doublel=2.0*pi*rad;
doubles=pi*rad*rad;
\nThelongis:
l<
Theareais:
4.在下划线处填上缺少的部分。
classSamp
voidSetij(inta,intb){i=a,j=b;
~Samp()
Destroying.."
intGetMuti(){returni*j;
inti;
intj;
intmain()
{Samp*p;
p=newSamp[5];
if(!
p)
Allocationerror\n"
return1;
for(intj=0;
j<
j++)
p[j].Setij(j,j);
for(intk=0;
k<
k++)
Muti["
]is:
p[k].___GetMuti()_______<
___p.GetMuti();
_______
return0;
5.请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:
11,10
13,12
{inta;
A(inti=0){a=i;
intGeta(){returna;
voidshow(){cout<
classB
{Aa;
intb;
B(inti,intj)__:
A_(inti=0)______
{}
a.Geta()<
"
b<
{Bb[2]={B(10,11),B(12,13)};
for(inti=0;
2;
__b.show();
五、程序分析题(本大题共2小题,每小题5分,共10分)
1.给出下面程序输出结果。
classBase
intY;
Base(inty=0){Y=y;
Base("
y<
)\n"
~Base(){cout<
~Base()\n"
voidprint(){cout<
Y<
classDerived:
publicBase
intZ;
Derived(inty,intz):
Base(y)
{Z=z;
Derived("
z<
~Derived(){cout<
~Derived()\n"
voidprint()
{Base:
print();
Z<
{Derivedd(10,20);
d.print();
2.给出下面程序输出结果。
classtest
{intx;
test(inti=0):
x(i){}
virtualvoidfun1()
{cout<
test:
x"
x<
classft:
publictest
{inty;
voidfun1(){cout<
ft:
y="
ft(inti=2):
test(i),y(i){}
{ftft1(3);
void(test:
*p)();
p=test:
fun1;
(ft1.*p)();
六、程序设计题(本大题共1小题,共10分)
1.求n(n=3)个学生的最高分和最低分及姓名,已有student类声明和main函数,完成
student类的实现部分。
string.h>
classstudent
{charname[10];
intdeg;
student(charna[]="
intd=0);
char*getname();
friendintcompare(student&
s1,student&
s2);
intgetdeg();
{studentst[]={student("
王强"
74),student("
李刚"
68),student("
张雪"
84)};
inti=0,min=0,max=0;
for(i=1;
3;
{if(compare(st[max],st[i])==-1)
max=i;
if(compare(st[min],st[i])==1)
min=i;
最高分:
st[max].getdeg()<
姓名:
st[max].getname()<
最低分:
(*(st+min)).getdeg()<