ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:38.50KB ,
资源ID:4068954      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4068954.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(面向对象程序设计习题.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

面向对象程序设计习题.docx

1、面向对象程序设计习题1 面向对象程序设计中得数据隐藏指得就是参考答案为:D A。输入数据必须输入保密口令B、数据经过加密处理C.对象内部数据结构上建有防火墙D.对象内部数据结构得不可访问性解析输入数据必须输入保密口令与数据经过加密处理都不就是面向对象程序设计得特征;对象内部数据结构上也不可能建有防火墙,所以它们都不就是面向对象程序设计中所指得数据隐藏、面向对象程序设计系统中得封装单位就是对象,对象之间只能通过接口进行信息交流,外部不能对对象中得数据随意地进行访问,这就造成了对象内部数据结构得不可访问性,也使得数据被隐藏在对象中、这就就是面向对象程序设计中得数据隐藏所指。2 下列各项中符合函数重

2、载必须满足得条件得就是参考答案为:DA。必须有不同得参数个数 、对应得参数类型必须不相同 . A与B必须同时满足 D、与B只要满足一个即可解析我们知道,在同一个作用域中,要实现函数重载必须满足得条件得就是: 有不同得参数个数;或者 对应得参数有不相同得数据类型,即与中只要有一个满足就可以了。当然两者都满足更好,但这不就是必须得、3.下列带缺省值参数得函数说明中,正确得说明就是 参考答案为: A、intFn(in x,in =2,nt z=3); 、intFun(nt x=1,int y,int z=3);. in un(it x,it =,intz); D。int Fu(intx=,int ,

3、int 3);解析在带缺省值参数得函数说明中,正确得说明应该就是无缺省值得参数依次排列在参数表得左边,排完无缺省值得参数后,再依次排列带缺省值得参数、从所给出得四个选项来瞧,只有“t un(nt x,in y=2,int )”符合这条规定,其它得都不符合。.有如下得对类“Cpl”得说明,其中( )就是错误得。 clss CSaple 参考答案为: .ina23; B、CSample(); pic: C.CSampe(int val);D. CSmple();解析在上面对类“CSmple”说明中,“apl()”与“CSampe(nt val)”就是该类重载得构造函数、“ CSaple()”就是该

4、类得析构函数,这三个语句都就是正确得。错误得语句就是“n =23,因为它违反了在类得声明(不管就是引用性声明,还就是定义性声明)中都不能以赋值表达式得形式给它得数据成员进行初始化、5、已知类A中得一个成员函数得说明如下: voi Se( &a); 则该函数得参数“A a”得含义就是 参考答案为: 、指向A得指针为。将变量得地址赋给类C.类A对象引用用作函数得形参 D.变量A与a按位与后作函数参数解析因为A就是一个类,所以“ a”表示a就是类得对象,但因为对象a得前缀了符号“&”,则“&a表示就是类得对象引用。所以“A &”得含义就是类A对象引用a用作函数得形参。6.若类A与类B得定义如下:cl

5、ssA public: int i,j; void t(); ; ass:A int i,j; protected: int k; ubli: oiae(); voidB:ake() =ij; 则其中()就是非法得表达式。 参考答案为:DA。oid get();B、it k; 、vod mke();、k=ij; 解析对于给定得四项中,前三项都就是正确得,只有第四项就是错误得、因为,类就是类A得私有派生类(缺省访问类型),所以中得公类型得数据成员在类B中成为了私有数据成员,但函数“void:mke()”既然就是类B得成员函数,则既可访问类A中得公有数据成员,也能访问类B中得私有数据成员,则表达式

6、“k=ij;”造成了访问得二义性,即其中得i与j,到底就是取自类A呢?还就是取自类B呢?7.下面得主程序中,语句( )就是错误得、 clas A ini; publc: vtual vid fn()=0; A(int a) i=a; ; lassB i j; public: void fu() out:fu()n”; B(inb,int c) :A() jc; ; vid n() 参考答案为:A . A a(5); . p; C。B ();D.Bb; 解析在类A中,函数“vrtul vid fun()=”为纯虚函数,因此,类A为抽象类、作为抽象类,它就是不能被用来定义具体对象得,而语句“ (5

7、);”恰恰就是定义抽象类得对象得,所以它就是错误得8.拷贝(复制)构造函数得作用就是 参考答案为: .进行数据类型得转换 、用对象调用成员函数 C、用对象初始化对象 。用一般类型得数据初始化对象 解析进行数据类型得转换与用一般类型得数据初始化对象都就是一般构造函数得功能、用对象调用成员函数不用构造函数,只要用“对象名.成员函数名”即可。所以拷贝(复制)构造函数得作用,只能就是用对象来初始化对象。9、下列说法中,正确得说法就是 参考答案为:B A。所有得运算符都能被重载 B。运算符被重载时,它们得优先级与结合性不会改变 .当需要时,我们可以自定义一个运算符来进行重载D.每个运算符都可以被重载成成

8、员函数与友元函数 解析当重载运算符时,不就是所有得运算符都能被重载,有几个运算符就是不能被重载得,如三元运算符“?:”、.、:、#等;也不就是每个运算符都可以被重载成成员函数与友元函数,如运算符=、()、与都只能被重载成成员函数;无论何时,都不能自定义运算符来进行重载,也即重载只能对已有运算符进行;但就是运算符被重载时,它们得优先级与结合性不会改变。0.下面对结构或类中成员得访问中,不正确得访问就是 参考答案为:A A、pointr.saary; (其中pointe为指向类对象得指针) B.inter-sala;.x=wrker.saary; (其中work为具有类类型得对象) D、Lctio

9、nA=A1;in x=r。et();(otin为已定义得类,A1为对象)解析因pinte为指向类对象得指针,所以“otersr”就是正确得访问数据成员得形式;因wokr为具有类类型得对象,所以“wrker、slary”也就是正确得访问数据成员得形式;因Loain为已定义得类,1为对象,所以“Loation rA=A1;in =A、GeX();”表示以对象A1初始化对象引用rA,然后由对象引用调用成员函数GeX()给变量x赋值,这样得访问成员函数得形式也就是正确得;“intr。salary;中,因为运算符.得优先级高于运算符得优先级,所以相当于“(pointe。sala);,那正确得形式应该就是

10、“*(piesalary);”。故“*point、slary”就是不正确得访问。11 C+ 对C语言作了很多改进,即从面向过程变成为面向对象得主要原因就是 ( )DA. 增加了一些新得运算符B、 允许函数重载,并允许设置缺省参数 、规定函数说明符必须用原型、引进了类与对象得概念 12 下列符号不能组成标识符得就是 (A ) A、 连接符 、 下划线 C. 大小写字母D。数字字符 13 类型修饰符 signed 不能修饰 (D) A. r 。 nt C、 long int D. float 14.在 inta=3,nt p= ;中, *p 得值就是 (D) A、 变量a 得地址值 B. 无意义

11、C。 变量 得地址值 。3 5、下列关于指针得操作中,错误得就是 (D ) A、 两个同类型得指针可以进行比较运算 。 可以用一个空指针赋给某个指针 C、一个指针可以加上两个整数之差D、 两个同类型得指针可以相加二,填空题不写解答过程,将正确得答案写在每小题得空格内。错填或不填均无分。1.面向对象程序设计中得多态性包括静态多态性与动态多态性,前者由_机制支持,而后者则由_机制支持。答:函数重载、虚函数解析静态多态性又称编译时多态性,调用何函数应该在编译之前就知道了,所以必须由函数重载机制来支持。动态多态性又称运行时多态性,调用何函数只有在运行时才知道,所以由虚函数(与指针或引用)机制来支持。2

12、.由hrconst r=tucture;所以定义得指针称为_,关键字con 所修饰得就是_。答:指向常量得指针、指针所指得字符串解析根据由在修饰符“cost”中位置得不同,它所修饰得对象也不同,“ont 表示所修饰得就是指针所指得常量,该指针称为指向常量得指针;“* onst表示所修饰得就是指针本身,该指针称为常指针;“ cst *”则表示所修饰得就是指针本身与指针所指常量,该指针称为指向常量得常指针。3.引入虚基类得目得就是为了解决多重继承中得_与_问题、答:二义性、多占用空间解析在允许多重继承时可能出现两个问题,第一个就是公有派生类中得成员通过不同基类调用它们上一级公共基类得同一成员,这就

13、产生了调用得二义性;每一个基类都为它们得上一级公共基类存有备份,这就引起了公共基类得重复存储,也就多占了存储空间。引入虚基类得目得就是为了解决多重继承中得这两个问题。4.构造函数与析构函数所调用得虚函数就是_得函数,因此调用时实现得就是_联编。答:所在类、静态解析在生成派生类得对象时,先调用基类得构造函数生成基类对象,再调用派生类得构造函数来生成派生类对象。所以当在构造函数中调用虚函数时,当调用基类得构造函数时,此时派生类还未生成,所以它只能调用自己得虚函数;调用派生类构造函数时,它也只能调用自己得虚函数,因为虚函数得调用就是不能由派生类调用基类得。在析构派生类对象就是时,先调用派生类得析构函

14、数析构掉派生类对象,再调用基类得析构函数来析够掉基类得对象。所以当在析够构函数中调用虚函数时,派生类得析构函数调用得就是它自己得虚函数(原因同构造函数),基类得析构函数调用得也就是它自己得虚函数,因为此时派生类对象以已被析构掉了。由上可见,当构造函数与析够函数调用虚函数时,它们调用得都就是自己类得函数,因此调用时实现得就是静态联编。7.说明一个cnst成员函数(又称常量成员函数)得方法就是,将const写在_之间,而且它修饰得就是_。答:函数头与函数体、is指针解析为了说明一个常量成员函数得方法就是,将const写在函数头得右圆括号)与函数体得左花括号之间,而且它修饰得就是对象所属得hs指针。

15、表示该函数不能修改它所在对象中得数据成员得值。20.对某个运算符得重载,实际上就是用关键字_与该运算符组成一个运算符函数,而且该运算符函数得返回类型不能就是_得。答:pater、voi解析对某个运算符得重载,实际上就是用关键字oerte 与该运算符组成一个运算符函数,而且该运算符函数得返回类型不能就是无类型得,即不能就是oid得、三改错题1.分析下列程序中得错误,并说明出错原因、 incude cass a onst int n; publ:base() cut”Iitalizng efautn”; bae(int m) cut”Iniialing; n=; b() cout”estrying

16、n; ; void i() basx(1); basey=; 答:(1)n=m; cont数据成员不以该形式赋值 (2)错误处ase y=x;,以对象初始化对象解析()作为cons数据成员n不能用赋值表达式得形式为其赋初值,必须在定义构造函数时在函数头中以“ae(intm):(m)”形式来初始化。()bae=x; 语句中=不就是赋值得意思,而就是初始化得意思。即在定义类ae得对象y时,以对象x给它初始化,相当于bse y(x);、但就是以对象初始化对象时,必须调用拷贝构造函数才行、因程序中没给出拷贝构造函数,也不能调用系统得缺省拷贝构造函数,因用户给出了构造函数后,再也不能调用系统提供得任何缺

17、省构造函数、所以,bs yx;就是错误得。、分析下列程序中得错误,并说明出错原因、 include clasA n x; pblic: A(it a) x; fun(); viu voifun()0; ;classB:pulic public: (i ) :A(b) voidfn() ;voi mai() A aa(5); Bbb(8); 答:1)A a(5);抽象类不能定义对象解析(1)在构造函数“A(int a)”调用了纯虚函数“un()”,因构造函数调用虚函数就是静态联编,即调用得就是它自己类得虚函数、在此调用得就是纯虚函数,它只被说明,而未定义,所以不可能被执行,因此出错。()抽象类相

18、当于就是对类得引用性声明,所以它只能定义该类得指针与引用,而不能定义它得对象、在此,为抽象类,而“A a()却定义了A得对象,因此就是错误得。3、分析下列程序中得错误,并说明出错原因。 include claAA int aa; AA(int x) aa=xx; pulic: n et() reurn aa; A() u”DestoygA endl; ; mai() AAel(5); coutlm、get()enl; 答:(1)AA(n x) 得访问属性错、应具有公有属性解析(1)构造函数虽就是由系统自动调用来生成对象得,但一般都就是在类外调用,所以它得访问属性必须就是公有得。程序中构造函数得

19、访问属性就是私有得(缺省值),运行中必定出错、四。完成程序题(本大题共5小题,每小题4分,共20分) 根据题目要求,完成程序填空。1.仔细阅读下列求两个点之间距离得程序,根据程序得输出结果在划线处填入正确语句。clas oit flax,y; pulic: oin(float a,float b) xa;y=b; float ditane(point p) loat x=_; float dy=_; tur (float)sqrt(dx*d+yy); ; vd in() pint p1(2,),2(32,3); outp、_edl; 答: 、x-x 。yy itanc(p2) 解析由于求两点之

20、间距离得函数“stance”为成员函数,所以由该函数得his指针所指对象可用作起点(参数之一),另一个用作终点得参数,必须在函数得参数表中显式地给出。x 与分别计算两个结点间x与坐标间得距离,因此应该为:=、x x 与dy =。y y、对它们求平方相加后开方即可,得到两点间得距离:(flot)st(ad+dy*d)。在主程序中求p1与p2两个结点之间得距离,由于由p1调用距离函数,所以由p2作为它得参数,即dsance()。2.两个复数只有当它们得实部与虚部分别相等时,才被认为它们相等。在空格处填入合适得内容,以完成下面得程序,使其重载运算符“=”,用以比较两个复数得相等。请在主函数中输出比较

21、得结果、 nude cmplex dube real,im; lic: plex(double r,doulei) realr; imgi; ool opertor=(omplex ); ; intl:operato=(plexom) etun(_) oi main() plx1(12。,32.5),c2(1.7,18、6); if(_) eturn outtrue”; else eturn cout”alsen; 答: (rel=co、real)&(img=c。img) 1=c2或1.prator=(c2)解析若两个复数得相等,则必有它们得实数部分与虚数部分都相等,所以运算符重载函数中返回“

22、(real、ral)&(imag=cm、mg)”,只有ral=c、rel与mag=。imag都为真时,该函数得返回值才为真、在主程序中,为了比较两个复数c1与c2,可以隐式地写成“c1=2”,也可显式写成“c1.oprator=(c2)。3。下列程序中声明了两个类AA与BB,其中函数“prin就是类AA得成员函数,但就是类BB得友元函数。请在、与处各填入正确得内容,使程序能正常运行、 #incde _; lass AAint t; publi: AA(i x) =x; voi print(BB); ; clasBB int s; ublic: BB(int y) sy; fd vi _rit(

23、B ); ; void _ cotAA:T”;BB:W.Sedl; void main() (); B n(8); m.prin(); 答: clasBB; : AA:it(BB &w) 解析由于A类得成员函数“rit”就是类BB得友元函数,因此它必须有一个B类得引用作为参数,以便有引用B类数据成员得接口。但此时B类还未定义,为解决此矛盾,在处先对BB类作引用性声明“la B;”,告诉系统B类在后面定义。因为函数“prit”就是类AA得成员函数,在类外定义必须加上类名与作用域分辨符,即在处加上“AA:”。在BB类外定义“print”时,因就是友元,所以没有加上“B:”得必要,但“A:”还就是必

24、须加得,所以在处填“AA:rint(B w)”、五、程序分析题.请分析以下得程序,给出该程序得正确执行结果。inlueusin namespa st;in (t x,int y) rtrn x+; vod main() n m=2,=; ot1:d(m+,m+)end; m=,n=3;cou”2:”ad(+m,m+n)ndl; =2,n=3; cout3:ad(mn,+)endl; m=2,n=3; co4:ad(m+n,+m)endl; 答:1:7 2:8 3:8 4:解析在说明答案之前,要说明两个问题:1)C+语言中,函数参数就是压在栈里得,因压栈就是从前往后进行得,所以出栈就就是从后向前

25、进行得,也即先取最后得参数,然后再向前逐个取用;2)对于单加运算,m+就是先执行后加1,+m就是加后再执行。 由此,因=2,=;,所以:1:(+)+(m+n)=2+(23)=7 (+后执行,且后加,所以m=2一直未变)2:(+m)(n)=3(3)=8 (+后执行,但先加1,执行+m时,m了):(m+n)+(+)(33)+2=8 (先执行m+,后加1,执行+n时,m=3了)4:(m+n)(+m)=(3+3)39; (先执行+m,且先加1,故一开始就有m=3)。请分析下面得程序并给出该程序得执行结果、 #incle clasAA int ; plic: A() cout”Intalizing A!”; AA() ut”Destroyig AA!n”; ; laB it b; AA p; uic: B() coutIituliing B!n”; B() ot”Dstroyg BB!n; ; voain() BB X; cut”Ending main!n”; 答:Inituaizig ! IntualizigB! ndig mi

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

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