C试题及答案(三)_第1页
C试题及答案(三)_第2页
C试题及答案(三)_第3页
C试题及答案(三)_第4页
C试题及答案(三)_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、(共10分,每题1分)单项选.

1.对于全局函.in.f(void.,与其完全等价的函数原型为.[c]

A.int.f.).B.in.f(voi..const.C.cons.in.f.).D.A.B,C都不.

2.类A中有唯一的非静态成员函数in.f(A.one)和私有的数据成员in.x;,那么在此成员函数

的函数体中可以有语句.

[d]

A.retur.one.f(this).B.x=f(this).C.this->f(x.one).D.int.cons.pX=&one.x.

3.下面关于ne.和delete操作符的说法,哪个是不正确的.[d]

A.使用new操作符,可以动态分配全局堆中的内存资源.

B.若p的类型已由A*强制转换为voi.*z那么执行语句delet.p;时,类A的析构函数不

会被调用.

C.实现全局函数时,new和delete通常成对地出现在由一对匹配的花括号限定的语句块中.

D.执行语句..p=ne.A[100]洌,类A的构造函数只会被调用1次.

4.类TM和类TN是两个独立的类,那么类TM中哪种形式的数据成员•定是不允许的.[c]

A.TM.a.B.TN.a.C.T.a.D,T,a.

5.类B是通过public继承方式从类A派生而来的,且类A和类B都有完整的实现代码,那

么卜.列说法正确的是.

A.类B中具有pubic可访问性的成员函数个数一定不少于类A中public成员函数的个数.

B.一个类B的实例对象占用的内存空间一定不少于一个类A的实例对象占用的内存空间.

C.只要类B中的构造函数都是public的,在main函数中就可以创建类B的实例对象.

D.类A和类B中的同名虚函数的返回值类型必须完全一致.

6.下列哪种函数可以是虚的.[d]

A.自定义的构造函.B.拷贝构造函.C.静态成员函.D.析构函.

7.类A有一个实例化的常量对象az那么下面的说法中不正确的是.

A.类A中的非静态数据成员•定都是常量成员.

B.通过a可以直接调用类A的常量成员函数.

C.a不能直接作为左值表达式使用.

D.a可以是静态常量对象.

8.在不考虑强制类型转换的情况下,关于类中常量成员函数的下列说法不正确的是.

A.常量成员函数中不能修改本类中的非静态数据成员.

B.常量成员函数中可以调用本类中的任何静态成员函数.

C.常量成员函数的返回值只能是void或常量.

D.若常量成员函数中调用虚函数f,那么函数f在本类中也一定是一个常量成员函数.

9.类C是以多重继承的方式从类A和类B继承而来的,类A和类B无公共的基类,那么.

A.类C的继承方式只能采用public继承.B.可改用单继承的方式实现类C的同样功能.

C.类A和类B至少有一个是抽象类.D.类A和类B至少有一个是虚基类.

10.下列哪种用法不能体现类A和类B之间的组合关系.

A.类A中声明数据成员.b.

B.类A中声明数据成员B.b.

C类A中声明数据成员cons.B.b.

D.类A中声明成员函..func.B.obj).

二、(共10分,每题2分,多选、少选、错选都不得分)多项选.

1.下面关于指针变量和引用变量的说法正确的是.

A.指针变量存放的是内存地址,并且可以置为0.

B.定义引用变量时,必须同时指明具体被引用的对象或变量.

C.使用取地址操作符,可以取得指针变量自身的地址,但取不到引用变量自身的地址.

D.类中的数据成员可以是指针变量,但不能是引用变量.

2.类A中有唯一的一个公有成员函数f,对于类A的一个对象2,执行语.a.f(lOO);成功,那

么,的函数原型可以为.

A.A.=50).B.voi.f(int&.const.C.cons...f(cons.in.).D..&,const.

3.关于类中重载赋值运算符的正确说法是.

A.由编译器提供的缺省赋值函数具有public访问性并且执行按位赋值.

B.在重载派生类的赋值操作时,不但要实现派生类中数据成员的赋值,还要负责基类中数

据成员的赋值.

C.只有在类中含有指针数据成员或引用数据成员时,才需要重或类的赋值操作.

D.通过修改类A的声明或定义,可以禁止用户在类A对象间进行任何赋值操作.

4.在类的静态成员函数的实现体中,可以访问或调用.

A.本类中的静态数据成.B.本类中非静态的常量数据成.

C.本类中其它的静态成员函.D.本类中非静态的成员函.

5.关于异常和C++提供的异常处理机制正确的说法是.

A.若程序员预见到程序中的异常,则一定可以通过修改程序代吗来避免异常出现.

B.使用dynamijcast操作符可能会产生异常.

C.异常可以用catch进行捕获处理..

D.异常可以是对象,也可以是普通整数.

三、(共20分,每题2分)判断正误,对于你认为错误的论述,说明原因或举出反例.

1.函数体内声明的静态变量,至多只会被初始化一次.

2.对于同•个类中的两个非静态成员函数,它们的函数的名称、参数类型、参数个数、参数

顺序以及返回值的类型不能完全相同.

3.inline函数表示编译器•定会将函数体直接插入到调用此函数的地方,这样可以加快程

序的运行速度.

4.每个cpp文件是单独编译的,但•个程序中多个cpp文件的编译顺序是不固定的.

clas.B:publi...

public.

B(in.vl,in.v2):A(vl),y(v2..f.)..

virtua.~B...f.)..

virtua.voi.f..{++count;y+=50.Sho..);.

virtua.voi.Sho...cons.

{cout<<"count="<<count<<.y="<<y<<endl;.

private.

in.y.

?.

in.A::count=0.

in.main..

.A.p=ne.B(l,2).

P->E).

delet.p.

retur.O.

五、(5分)写出下面程序的运行结.

#includ.<iostream,h.

clas...

private.

frien.clas.B.

A(in.val=O):data(val),use(l...

in.use.data.

}.

clas...

public.

B(jn.val=O):pa(ne.A(val)...

pa->use==O.delet.pa..

B(cons.B.rhs.{++rhs->use;pa=rhs.pa;.

B.operator=(cons.B.rhs).

A.operator-cons,{retur.pa;.

voi.Display..cons..cout<<"data="<<pa->dat.

<<"use="<<pa->use<<endl..

private.

..pa.

}.

B.B::operator=(cons.B.rhs.

i.(this==&rhs.retur.*this.

i.(—pa->use==O.delet.pa.

++rhs->use.

pa=rhs.pa.

retur.*this.

in.main(..

.bl(l),b2(bl)zb3(3).

bl.Display().

b2.Display().

b3.Display。.

b3=bl.

bl.Display().

b3.Display().

retur.O.

六、(共20分)回答下列各.

1.说明类中的tected.private成员函数分别在public、protected和private

继承方式下在派生类中的可访问性。(4分.

2.若类A和类B没有继承关系,对于函数voi.func(A&.,请至少用两种不同方法说明如何才

能传递一个非常量的B类对象给func函数。(4分.

3.在声明类中的构造函数、析构函数、纯虚函数、静态成员函数、非静态的成员函数以及全

局函数作为类的友元函数时,哪些可以是常量成员函数?(3分.

4.举例说明重裁(overload.、重定义(redefine.和重写(override)的含义。(3分.

5.通常类A的拷贝构造函数的原型写为A(cons.A&);,请问为什么参数一定要使用引用形

式?使用const修饰符除了可以防止修改传递给构造函数的实参外,还有什么作用?(3

分.

6.程序员规范中要求不要写出类似(++i)+(i++..f(++i,i++)这样的代码,请说明原因。

(3分.

七、(共8分)阅读卜.而部分程序代码,完成3个问题.

#includ.<iostream,h.

clas...

public.A(in.vl)O(vl.{.

virtua.in.GetData..cons.{retur.x;.

private.in.x.

}.

clas.B:publi...

public.B(in.vlzin.v2):A(vl)zy(v2.{.

virtua.in.GetData..cons.{retur.y;.

private.in.y.

}.

clas.C:publi...

public.C(in.vlzin.v2/in.v3):B(vl,v2)/z(v3.{.

virtua.in.GetData..cons.{retur.z;.

private.in.z.

}.

cons.A.max2(cons.A.onezcons.A.two.

.retur.(one>two?one:two)..

voi.main(..

.b(lz2)..c(100,10,l).

cout<<max2(b,c).GetData.)<<endl.

cout<<max2(b,5).GetData.)<<endl.

1.(4分)请在不改变上述已有弋码的条件下,添加必要的函数使得程序可以编译通过和运行,

并输出结果2和5«其中比较对象时只比较各自的或在派生类定义的数据成员,如比较类B

的对象b和类C的对象c时,实际比较的是b.y和c.z.

2.(2分.若不改变函数max2的函数体,只将函数声明改成

A.max2(cons.A.one,cons.A.two),请问这样行吗?为什么.

3.(2分)若main中有语句A.p=ne.C(l,2,3中和delet.p;,那么类A.类B和类C应做何修

改.

八、(共10分)现考虑编写一个扑克游戏:只用一付无大小王的扑克,扑克的花色(suit)

分为Spade、Heart、Diamond和Club,每门花色的牌共13张,面值(rank)分别为

234.5.67、8、9、10、Jack、Queen.King和Ace,每张扑克牌应包含如下信息:唯

一的ID号(1・52)、花色、面值、背面图案的编号等。每张扑克牌的操作有:判断两张扑克

牌是相同花色吗.相同面值吗?判断•张扑克牌是给定的花色吗?是给定的面值吗?请

写出扑克牌类Card类的声明和实现代码,要求选取适当形式的数据成员描述每张扑克牌的

信息,同时以成员函数的形式实现指定的操作.

九、(共12分)现有一个2x2的矩阵,其第一行元素从左到右依次为dl和己2,第二行元

素从左到右依次为a3和a4,简记此矩阵为M(alza2za3za4).对矩阵M可进行两种操作:

一种是转置,即交换己2和己3的位置.;另一种是变换,即将矩阵M(al户2,己3户4)变换为

M(bl,b2,b3,b4),其中bi是变换ai后的结果。假定已有全局函数

in.GetNextPrime(in.data).它返回比data大的最小素数,若返回值越界则返回2。不用

考虑模板,请按下列具体要求实现代码.

1)<6分)若ai都是整数,每次变换都将ai变换成比ai大的最小素数(i=l,2,3,4).请

用类M描述满足上述条件的矩阵,要求给出类M的声明和实现代码,同时写出main函数,

并在其中创建一个M(l,10,100,1000)矩阵.

2)(6分)若矩阵中元素a2和a3既可以是整数,也可以是另一个满足此定义的矩阵,例

如:矩阵M(l.M(2.3.M(4,5;6,7)Q,.,10)。矩阵转置时,既要交换己2和己3的位置,还

要对a2和a3中的矩阵进行转置:矩阵变换时,同样也要对其中的矩阵元素进行变换.请给

出满足此要求的矩阵类M的声明利实现代码。

一、单.

1..2..3..4..5..6..7..8..9..10..

二、多.

1.AB.

2.AC.

3.AB.

4.A.

5.BC.

三、判断对.

1..

2..如可有两个成员函数,in.f();,in.f(.const.

3..是否真正内联,由编译器决定。如函数是递归函数,那么永远不会内联.

4..

5..可通过类的静态成员函数创建实例,如单件模式.

6..

7..如可通过继承自基类的成员函数访问基类中的X.

8..友员关系不具有传递性.

9..

10..

四、写结果.目的是考察虚函数的调用,包括普通成员函数中调用其它虚函数.

在构造、析构函数中只会调用虚函数的本地版本.

五、写结果.是一个使用Handle类进行引用计数的例子.

六、回答问.

1.重点是基类中的任何Private在派生类中都是不可访问的.

2.可在A类中定义一个构造函数:A(cons.B&).

或在B类中定义一个自动转换函数.operato.A..const.

3.只有纯虚函数、非静态的成员函数可以是常量成员函数.

(这题有点问题,析构函数可以是纯虚函数,但不能是常量函数.

4.如类A中有函.in.f(void);和in.f(int);为重载(overload.(同名,参数不同.

如类A中有函.in.f(void);,A的派生类B中给in.f(void)一个新的实现体,为

redefin.

如类A中有虚函.virtua.in.f(void);,A的派生类B中给virtua.in有void)一个

新的实现体.

为override.

5人(8柒人.。5).当调用此拷贝构造函数时,需将参数压栈,若不使用&,就需

要.

栈内创建一个one的副木,而这需要用拷贝构造函数。这样就会形成递归调用.

使用const,还允许用一个常量对象作为样本,来构造一个新的对象.

6.计算子表达式的顺序由编译器决定的,虽然参数的压或顺序在给定的调用方式

下式固定的.

但参数表达式的计算顺序也由编译器决定的。不同的编译器或不同的表达式计算

的顺序可.

不一致.

七.

1.添加全局函.

boo.operator>(cons.A.one.cons.A.two.

retur.one.GetData()>two.GetData().

2.不行.retu「.(one>two?one:two)M,不能将常量赋给变量.

3,需要将ABC三个类的析构函数改为虚的.

八.Card类(不用enum,只用数字也可以.

main函数.

//enum前加上const就可将下面所有的都放入.h中.

cons.enu.SUL{SPADE=O,HEART,DIAMOND,CLUB}.

cons.enu.RAN.{TWO=0,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,T

EN,JACK,QUEEN,KING,ACE).

clas.Car.

public.

Card(in.id):mID(id)zmSuit((id-l)/13)zmRank((id-l)%13){.

boo.IsSameSuit(cons.Card.rhs.

.retur.((this==&rhs)?false:mSuit==rhs.mSuit);.

boo.IsSameRank(cons.Card.rhs.

.retur.((this==&rhs)?false:mRank==rhs.mRank)..

boo.IsSuit(in.suit.

{retur.mSuit==suit;.

boo.IsRank(in.rank.

{retur.mRank==rank;.

private.

stati.in.nBacklmg.〃背面图.

cons.in.mID.

cons.i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论