c++期终考试2部分答案Word下载.docx
《c++期终考试2部分答案Word下载.docx》由会员分享,可在线阅读,更多相关《c++期终考试2部分答案Word下载.docx(17页珍藏版)》请在冰点文库上搜索。
A.voidPerson(Person&
p);
B.Person(constPerson&
C.PersonPerson(Person&
p)D.Person(Personp);
4.下列不能作为类的成员的是()。
A.自身类对象的指针B.自身类对象C.自身类对象的引用D.另一个类的对象
5.下述静态数据成员的特征中,()是错误的。
A.说明静态数据成员时前边要加修饰符static
B.静态数据成员在类内进行初始化
C.引用静态数据成员时,要在静态数据成员名前加类名和作用域运算符
D.静态数据成员是所有对象共用的
6.已知类A是类B的友元,类B是类C的友元,则()。
A.类A一定是类C的友元
B.类C一定是类A的友元
C.类C的成员函数可以访问类B的对象的任何成员
D.类A的成员函数可以访问类B的对象的任何成员
7.对于常成员函数,下面描述正确的选项是()。
C
A.类的成员函数可以操作常对象B.类的成员函数不能操作常对象
C.只有常成员函数可以操作常对象D.在常成员函数中,常对象可以被更新
8.有如下类定义:
classMyBASE{
intk;
public:
voidset(intn){k=n;
}
intget()const{returnk;
};
classMyDERIVED:
protectedMyBASE{
protected;
intj;
voidset(intm,intn){MyBASE:
:
set(m);
j=n;
intget()const{returnMyBASE:
get()+j;
则类MyDERIVED中保护成员个数是()。
A.4B.3C.2D.1
9.有下列代码:
1classFred;
2classBarney{
3Fredx;
4Fred*p;
5};
6classFred{
7Barneyy;
8};
有错误的地方是()。
A.第1行:
classFred;
B.第3行:
Fredx;
C.第4行:
Fred*p;
D.第7行:
Barneyy;
10.需要一种逻辑功能一样的函数,而编制这些函数的程序文本完全一样,区别只是数据类型不同。
对于这种函数,下面不能用来实现这一功能的选项是()。
D
A.宏函数B.为各种类型都重载这一函数
C.模板D.友元函数
11.为正确执行以下程序,则函数定义正确的是()。
B
#include<
iostream.h>
voidmain()
{print(2,3.4);
A.template<
classT>
voidprint(Targ1,Targ2)
{
cout<
<
"
arg1:
<
arg1<
endl;
arg2:
arg2<
}
B.template<
classT1,classT2>
voidprint(T1arg1,T2arg2)
C.voidprint(intarg1,intarg2)
}
D.template<
classT>
voidprint(Targ1,intarg2)
12.以下基类哪个表示抽象类()。
C
A.classMyClass{virtualvoidvf(int);
B.classMyClass{voidvf(int)=0;
C.classMyClass{virtualvoidvf()=0;
D.classMyClass{virtualvoidvf(int){}};
13.下面关于虚函数和函数重载的叙述不正确的是()。
A
A.虚函数不是类的成员函数
B.虚函数实现了C++的多态性
C.函数重载允许非成员函数,而虚函数则不行
D.函数重载的调用根据参数的个数、序列来确定,而虚函数依据对象确定
14.如果表达式++i*k时中的“++”和“*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为()。
A)operator*(i.operator++(),k)B)operator*(operator++(i),k)
C)i.operator++().operator*(k)D)k.operator*(operator++(i))
15.下列关于虚函数的说法,错误的是()。
A.需要通过基类的对象、指针或者引用来调用虚函数
B.派生类中的虚函数必须与基类中的虚函数同名,但参数的个数可以不一样
C.一个函数如果被定义成虚函数,经历多次派生后,其虚特性将不会保持
D.设置虚函数的目的是消除二义性
16.有如下程序:
#include<
iostream>
usingnamespacestd;
classBase{
private:
voidfun1()const{cout<
”fun1”;
protected:
voidfun2()const{cout<
”fun2”;
voidfun3()const{cout<
”fun3”;
classDerived:
protectedBase{
public:
voidfun4()const{cout<
”fun4”;
intmain(){
Derivedobj;
obj.fun1();
//①
obj.fun2();
//②
obj.fun3();
//③
obj.fun4();
//④
其中没有语法错误的语句是()。
A.①B.②C.③D.④
17.有如下类定义:
classAA{
inta;
intgetRef()const{return&
a;
}//①
intgetValue()const{returna;
}//②
voidset(intn)const{a=n;
}//③
friendvoidshow(AAaa)const{cout<
}//④
其中的四个函数定义中正确的是()。
B
A.①B.②C.③D.④
18.下面程序使用new与delete命令,下面是对这段程序的叙述,其中正确的是()。
intmain()
{
long*p,i;
p=newlong;
if(!
p){cout<
”Allocationerror\n”;
return1;
*p=1000;
i=(long)p;
cout<
”Hereisintegeratp:
”<
*p<
”\n”;
”Hereisi:
“<
i<
deletep;
return0;
A.有错误,编译不能通过
B.正确,执行结果为:
10001000
C.正确,但执行结果的第二个数值不定
D.正确,执行结果的各个数值均不为1000
19.要求打开文件test.dat,可读出数据,正确的语句是()D
A.ifstreammyFile(“test.dat”,ios:
in);
B.fstreammyFile(“test.dat”,ios:
C.ifstreammyFile;
myFile.open(“test.dat”,ios:
D.以上都正确
20.read函数的功能是从输入流中读取()。
D
A.一个字符B.当前字符C.一行字符D.指定若干字节
试题二、程序填空题(每空1分,共20分)。
1.【程序说明】以下程序能实现求a2+b2+c2。
其中a、b、c的值由对象的初始化值提供。
该程序使用静态成员实现。
运行结果:
Number=5
Number=10
Number=15
Result=350
classmyclass{
myclass(intx);
voidgetnumber();
staticvoidResult();
(1);
//定义静态数据成员sum
myclass:
myclass(intx){
a=x;
(2);
voidmyclass:
getnumber(){
cout<
"
Number="
a<
endl;
Result(){
Result="
sum<
(3);
intmain()
{
myclassob1(5),ob2(10),ob3(15);
ob1.getnumber();
ob2.getnumber();
ob3.getnumber();
(4);
//调用Result输出结果
return0;
(1)______________
(2)_________________(3)________________(4)________________
2.【程序说明】请完成该类的实现。
classpoint
(5);
point(intx,inty)
{(6);
(7);
}
(8){returnx;
intgetY(){returny;
voidsetX(intxx){x=xx;
voidsetY(intyy){y=yy;
intx,y;
classArrayofPoints
ArrayofPoint(intn):
numofPoints(n)
{(9);
(10)Elements(intn)
{returnarray[n];
point*array;
intnumofPoints;
ArrayofPointsa(5);
a.Elements(0).setX(3);
(11);
//输出第一个点的横坐标
(5)_________________(6)_________________(7)________________(8)________________
(9)_________________(10)_________________(11)________________
3.【程序说明】已知定义了Clock类,请派生一个带“AM”、“PM”的新时钟类NewClock。
以下程序输出为:
8:
23:
34PM
enumAMPM{AM=1,PM};
classClock{
Clock(int=0,int=0,ints=0);
voidShowTime()
{cout<
Hour<
Minute<
Second;
intHour,Minute,Second;
Clock:
Clock((12))
{Hour=h;
Minute=m;
Second=s;
class(13){
NewClock();
NewClock(Clockc,AMPMap)(14){}
voidShowTime(){
(15);
//
(16);
}
AMPMAp;
intmain(){
NewClocknc(Clock(8,23,34),AMPM
(2));
nc.ShowTime();
return0;
(12)_________________(13)_________________(14)________________(15)________________
(16)_________________
4.【程序说明】文件Test1.txt中有一批非负整数,结尾以“-1”结束,要求将Test1.txt中的非负偶数挑出来,写到文件Test2.txt中。
请将下列程序补充完整。
(17);
intb;
ifstreaminfile;
(18)
(19)
outfile.open("
Test2.txt"
);
infile>
>
b;
while(b>
=0)
(20)
outfile<
b<
'
'
;
infile>
infile.close();
outfile.close();
(17)_________________(18)________________(19)________________(20)________________
答案:
(17)include<
fstream>
(18)ofstreamoutfile;
(19)infile.open("
Test1.txt"
)(20)if(b%2==0);
试题三、程序阅读题(每题5分,共20分)
⒈程序1下面程序的运行结果是________。
classB{
voidf1(){cout<
B:
f1"
classD:
publicB{
D:
voidf(B&
rb){
rb.f1();
intmain(){
Dd;
Bb,&
rb1=b,&
rb2=d;
f(rb1);
f(rb2);
B:
f1
2.程序2下面程序的运行结果是________。
classmyclass{
staticlongsum;
myclass(inta,intb)
{
x=a;
y=b;
voidgetxy()
sum*=x*y;
cout<
sum="
longmyclass:
sum=1;
myclassob1(1,2);
ob1.getxy();
myclassob2(3,4);
ob2.getxy();
myclassob3(5,6);
ob3.getxy();
sum=2
sum=24
sum=720
3程序3下面程序的运行结果是________。
#include<
classB
{
public:
B(){}
B(inti){b=i;
virtualvoidvirfun()
{
cout<
virfun()called.\n"
}
private:
intb;
};
classD:
publicB
D(){}
D(inti,intj):
B(i){d=j;
intd;
voidvirfun()
voidfun(B*obj)
obj->
virfun();
}
voidmain()
D*pd=newD;
fun(pd);
4.程序4下面程序的运行结果是________
程序:
usingnamespacestd;
classSample
intn;
Sample(){}
Sample(inti){n=i;
Sample&
operator=(Samples);
intdisp()
n="
n<
}
Sample&
Sample:
operator=(Samples)
Sample:
n=s.n;
return*this;
intmain()
Samples1(10),s2;
s2=s1;
s2.disp();
n=10
试题四、程序设计题(第一题10分,第二、三题各15分,共40分)
1.利用函数模板设计一个求数组元素中和的函数,并定义main函数测试。
2.定义一个汽车类vehicle,有车轮个数wheels和车重weight两个属性。
小车类car是它的私有派生类,有载人数passenger_load属性。
卡车类truck也是vehicle的私有派生类,有含载人数passenger_load和载重量payload这两个属性,每个类都有相关数据的输出的成员函数。
编写主函数测试所定义的类结构,实现对每个类中数据属性的输出。
3.设计如下类:
(1)建立一个Point类,表示平面中的一个点;
建立一个Line类,表示平面中的一条线端,内含两个Point类的对象;
建立Triangle类,表示一个三角形,内含三个Line类的对象构成一个三角形。
(2)设计三个类的相应的构造函数、复制构造函数,完成初始化和对象复制。
(3)设计Triangle类的成员函数完成三条边是否能构成三角形的检验和三角形面积计算,面积显示。
提示:
已知三角形的三个点,求三角形面积方法为:
S=distance(p1,p2)*distance(p3,Line(p1,p2))/2。