《C++》期末考试测验及答案Word文档格式.docx

上传人:b****4 文档编号:17051053 上传时间:2022-11-28 格式:DOCX 页数:11 大小:25.37KB
下载 相关 举报
《C++》期末考试测验及答案Word文档格式.docx_第1页
第1页 / 共11页
《C++》期末考试测验及答案Word文档格式.docx_第2页
第2页 / 共11页
《C++》期末考试测验及答案Word文档格式.docx_第3页
第3页 / 共11页
《C++》期末考试测验及答案Word文档格式.docx_第4页
第4页 / 共11页
《C++》期末考试测验及答案Word文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

《C++》期末考试测验及答案Word文档格式.docx

《《C++》期末考试测验及答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《《C++》期末考试测验及答案Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

《C++》期末考试测验及答案Word文档格式.docx

voidtestDefaulParam(inta,intb=7,charz='

*'

);

下面函数调用中,不合法的是()。

A.testDefaulParam(5);

B.testDefaulParam(5,8);

C.testDefaulParam(5,'

#'

D.testDefaulParam(0,0,'

5、下列语句中,将函数intsum(intx,inty)正确重载的是()。

A.floatsum(intx,inty);

B.intsum(inta,intb);

C.floatsum(floatx,floaty);

D.doublesum(inty,intx);

6、下列表示引用的方法中,()是正确的。

已知:

inta=1000;

A.int&

x=a;

B.char&

y;

C.int&

z=1000;

D.float&

t=&

a;

7、在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用()。

A.内联函数B.重载函数C.递归调用D.嵌套调用

8、下列有关C++类的说法中,不正确的是()。

A.类是一种用户自定义的数据类型

B.只有类中的成员函数或类的友元函数才能存取类中的私有成员

C.在类中,如果不做特别说明,所有成员的访问权限均为私有的

D.在类中,如果不做特别说明,所有成员的访问权限均为公用的

9、已知X类,则当程序执行到语句:

Xarray[3];

时,调用了()次构造函数。

A.0B.1C.2D.3

10、下面说法中,正确的是()

A.一个类只能定义一个构造函数,但可以定义多个析构函数

B.一个类只能定义一个析构函数,但可以定义多个构造函数

C.构造函数与析构函数同名,只要名字前加了一个求反符号(~)

D.构造函数可以指定返回类型,而析构函数不能指定任何返回类型,即使是void类型也不可以

11、已知:

print()函数是一个类的常成员函数,它无返回值,下列表示中,()是正确的。

A.voidprint()const;

B.constvoidprint();

C.voidconstprint();

D.voidprint(const);

12、下面描述中,表达错误的是()

A.公用继承时基类中的public成员在派生类中仍是public的

B.公用继承时基类中的private成员在派生类中仍是private的

C.公用继承时基类中的protected成员在派生类中仍是protected的

D.私有继承时基类中的public成员在派生类中是private的

13、设置虚基类的目的是( )。

A.简化程序B.消除二义性C.提高运行效率D.减少目标代码

14、下面()的叙述不符合赋值兼容规则。

A.派生类的对象可以赋值给基类的对象

B.基类的对象可以赋值给派生类的对象

C.派生类的对象可以初始化基类的对象

D.派生类的对象的地址可以赋值给指向基类的指针

15、关于虚函数的描述中,()是正确的。

A.虚函数是一个static类型的成员函数

B.虚函数是一个非成员函数

C.基类中说明了虚函数后,派生类中与其对应的函数可不必说明为虚函数

D.派生类的虚函数与基类的虚函数具有不同的参数个数和类型

16、下面关于友元的描述中,错误的是()。

A.友元函数可以访问该类的私有数据成员

B.一个类的友元类中的成员函数都是这个类的友元函数

C.友元可以提高程序的运行效率

D.类与类之间的友元关系可以继承

17、下列关于静态数据成员的说法,不正确的是()。

A.类中定义的公用静态数据成员,可以通过类的对象来访问

B.类中定义的所有静态数据成员,都必须在类外初始化

C.静态数据成员不是所有对象所共用的

D.普通的成员函数可以直接访问类中的静态数据成员

18、如果表达式++i*k中的“++”和“*”都是重载的友元运算符,若采用运算符函数调用格式,则表达式还可以表示为()。

A.operator*(i.operator++(),k)B.operator*(operator++(i),k)

C.i.operator++().operator*(k)D.k.operator*(operator++(i))

19、下面对模板的声明,正确的是()。

A.template<

T>

B.template<

classT1,T2>

C.template<

classT1,classT2>

D.template<

classT1;

classT2>

20、下列的各类函数中,()不是类的成员函数

A.构造函数B.析构函数C.友元函数D.复制构造函数

二、填空题(前14个空,每空1分,后3个空,每空2分,共20分)

1、类和对象的关系可表述为:

类是对象的,而对象则是类的。

2、静态成员函数没有隐含的,所以,在C++程序中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员。

3、在图1中,A,B,C,D,E,F均是类,其中属于单继承的派生类有,属于多继承的派生类有,类F的基类有,类A的派生类有。

4、如果只想保留公共基类的一个复制,就必须使用关键字把这个公共基类声明为虚基类。

5、从实现的角度来讲,多态性可以划分为两类:

和。

6、如果一个类包含一个或多个纯虚函数,则该类称为。

7、若要把voidfun()定义为类A的友元函数,则应在类A的定义中加入语句。

8、列出C++中的两种代码复用方式:

9、析构函数的作用是。

10、假定A是一个类名,则该类的拷贝构造函数的原型说明语句为:

11、后置自增运算符“++”重载为类的成员函数(设类名为A)的形式为:

三、阅读下面4个程序,写出程序运行时输出的结果。

(共13分)

1、

#include<

iostream>

usingnamespacestd;

voidfun(int&

a,int&

b)

{intp;

p=a;

a=b;

b=p;

}

voidexchange(int&

b,int&

c)

{if(a<

b)fun(a,b);

if(a<

c)fun(a,c);

if(b<

c)fun(b,c);

intmain()

{inta=12,b=89,c=56;

exchange(a,b,c);

cout<

<

"

a="

a<

b="

b<

c="

c<

endl;

return0;

2、

#include<

iostream>

classA{

public:

A(){cout<

"

A"

;

}

};

classB{

B(){cout<

B"

}

classC:

publicA{

C(){cout<

C"

private:

Bb;

intmain(){

Cobj;

return0;

3、

classA

{public:

A(){cout<

A:

:

A()called.\n"

virtual~A(){cout<

~A()called.\n"

classB:

publicA

B(inti)

{cout<

B:

B()called.\n"

buf=newchar[i];

virtual~B()

{delete[]buf;

~B()called.\n"

char*buf;

{A*a=newB(15);

deletea;

4、

voidf(){cout<

CallA'

sfunctionf()"

}

classB

voidf(){cout<

CallB'

voidg(){cout<

sfunctiong()"

publicA,publicB

voidg(){cout<

CallC'

{Ccc;

cc.B:

f();

g();

cc.g();

return0;

四、编程题(27分)

1、(10分)已知复数类Complex的声明如下:

classComplex

Complex();

//无参构造函数

Complex(double);

//转换构造函数

Complex(double,double);

//有两个形参的构造函数

friendComplexoperator+(Complex&

Complex&

//对“+”运算符进行重载

friendostream&

operator<

(ostream&

//对“<

”运算符进行重载

friendistream&

operator>

(istream&

//对“>

doublereal,imag;

要求:

(1)写出该类的所有构造函数的类外定义代码。

(2)写出对运算符“+”、“<

”、“>

”进行重载的运算符重载函数的定义。

2、(17分)下列Shape类是一个表示形状的抽象类,area()为求图形面积的函数,total()则是一个通用的用以求不同形状的图形面积总和的函数。

classShape

virtualdoublearea()=0;

doubletotal(Shape*s[],intn)

{doublesum=0.0;

for(inti=0;

i<

n;

i++)sum+=s[i]->

area();

returnsum;

(1)从Shape类派生圆类(Circle)、正方形类(Square),圆类新增数据成员半径(radius),正方形类新增数据成员边长(a),圆类和正方形类都有构造函数,修改、显示数据成员值的函数,求面积函数。

(2)写出main()函数,计算半径为5.5的圆和边长为9.9的正方形的面积和(必须通过调用total函数计算)。

(面向对象A卷答案)1-5.CDBCC 6-10.AADDB

11-15.ABBBC 16-20.DCBCC

1.抽象实例2.this指针

3.ED、FA、B、C、D、ED、F

4.virtual5.静态多态性动态多态性

6.抽象类7.friendvoidfun(A&

a)

8.继承组合或模板

9.在对象被系统释放之前做一些内存清理工作

10.A(constA&

)11.Aoperator++(int)

1、a=89,b=56,c=12

2、ABC

3、A:

A()called.

B:

B()called.

~B()called.

~A()called.

4、CallB'

sfunctionf()

CallB'

sfunctiong()

CallC'

1、(10分)

Complex:

Complex(){real=0;

imag=0;

Complex(doubler){real=r;

Complex(doubler,doublei){real=r;

imag=i;

Complexoperator+(Complex&

c1,Complex&

c2)

{Complexc;

c.real=c1.real+c2.real;

c.imag=c1.imag+c2.imag;

returnc;

ostream&

operator<

(ostream&

output,Complex&

c)

{output<

("

c.real<

+"

c.imag<

i)"

returnoutput;

istream&

operator>

(istream&

input,Complex&

inputrealandimaginarypartofcomplexnumber:

input>

c.real>

c.imag;

returninput;

2、(17分)

classCircle:

publicShape

Circle(doubler){radius=r;

voidset()

{cout<

Pleaseinputthevalueofthecircle:

cin>

radius;

voidshow()

theradiusofthecircle="

radius<

doublearea(){return3.14159*radius*radius;

doubleradius;

classSquare:

Square(doublea){this->

a=a;

Pleaseinputthevalueofa:

doublearea(){returna*a;

doublea;

{

CircleC(5.5);

C.show();

SquareS(9.9);

S.show();

Shape*s[]={&

C,&

S};

total="

total(s,2)<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1