面向对象程序设计模拟试卷.doc
《面向对象程序设计模拟试卷.doc》由会员分享,可在线阅读,更多相关《面向对象程序设计模拟试卷.doc(29页珍藏版)》请在咨信网上搜索。
面向对象程序设计模拟试卷一 一. 单选题(15)。 1. 关于构造的叙述_____正确: A. 最先构造虚基类 B. 最先构造基类 C. 最先构造派生类的对象成员 D. 都不对 2. 关于静态数据成员的叙述_____正确: A. 公有的可在类体外初始化 B. 私有的不能在类体外初始化 C. 私有和保护的不能在类体外初始化 D. 都能够且必须在体外初始化 3. 若派生类函数不是基类的友元, 关于该函数访问基类成员_____正确: A. 公有的可被派生类函数访问 B. 都能够被派生类函数访问 C. 公有和保护的可被派生类函数访问 D. 都不对 4. 关于函数的所有缺省参数的叙述_____正确: A. 只能出现在参数表的最左边 B. 只能出现在参数表的最右边 C. 必须用非缺省的参数隔开 D. 都不对 5. 使用friend、 virtual、 static说明函数的叙述_____正确: A. 必须同时使用三个 B. 只能同时用其中两个 C.只能独立单个地使用 D. 都不对 二. 指出各类的成员及其存取属性(20) 。 三. 指出main中每行的输出结果(20) 。 #include <iostream.h> struct A{A( ){ cout<<'A';}}; struct B{B( ){ cout<<'B';}}; struct C: A{C( ){ cout<<'C';}}; struct D: virtual B, C{D( ){ cout<<'D';}}; struct E: A{ C c; E( ): c( ){ cout<<'E';} }; struct F: virtual B, C, D, E{ F( ){ cout<<'F';} }; void main( ){ A a; cout<<'\n'; B b; cout<<'\n'; C c; cout<<'\n'; D d; cout<<'\n'; E e; cout<<'\n'; F f; cout<<'\n'; } 四. 指出以下程序的语法错误及其原因(15) 。 class A{ static int a=0; protected: int b; public: int c; A(int); operator int( ); } a(1, 2); class B: A{ B(int); virtual int d; int e; public: A::b; friend int operator =(B); static B(int, int); } b=5; class C: B{ public: int operator++(double); }; int main( ){ int *A::*p, i; i=a.a; i=A(4); i=b.c; p=&A::c; i=b; return ; } 五. 指出main变量i在每条赋值语句执行后的值(15) 。 int x=2, y=x+30; struct A{ static int x; int y; public: operator int( ){ return x-y; } A operator ++(int){ return A(x++, y++); } A(int x=::x+2, int y=::y+3){ A::x=x; A::y=y; } int &h(int &x); }; int &A::h(int &x) { for(int y=1; y!=1|| x<201; x+=11, y++) if(x>200) { x-=21; y-=2;} return x-=10; } int A::x=23; void main( ){ A a(54, 3), b(65), c; int i, &z=i, A::*p=&A::y; z=b.x; i=a.x; i=c.*p; i=a++; i=::x+c.y; i=a+b; b.h(i)=7; } 六. 为了没有误差地表示分数, 定义类FRACTION来表示分数, 请编程实现分数类中的除cmd外的所有函数(15)。 class FRACTION{ //对于, numerator存分子6, denominator存分母7 int numerator, denominator; static int cmd(int x, int y); //求整数x,y的最大公约数 public: int operator>(const FRACTION&)const; //大于比较, 例> FRACTION(int num, int den=1); //num、 den各为分子和分母 FRACTION operator*( )const; //分数约简, *= FRACTION operator+(const FRACTION&)const; //加法, += FRACTION operator*(const FRACTION&)const; //乘法, *== }; int FRACTION::cmd(int x, int y){ int r; if(x<y){ r=x; x=y; y=r; } while(y!=0){ y=x%(r=y); x=r; } return x; } 面向对象程序设计模拟试卷二 一.单项选择题 ( 从下列各题四个备选答案选出一个正确答案, 并将其代号填在题干前的括号内。答案选错或未作选择者, 该题不得分。每小题1分, 共10分) ( ) 1.以下有关析构函数的叙述, 选择正确的填入括号内。 A. 能够进行重载能够定义为虚函数 B. 不能进行重载能够定义为虚函数 C. 能够进行重载不能定义为虚函数 D. 不能进行重载不能定义为虚函数 ( ) 2.以下有关函数缺省参数的出现位置, 选择正确的叙述填入括号内。 A. 必须全部出现在函数参数表的左部 B. 必须全部出现在函数参数表的右部 C. 必须全部出现在函数参数表的中间 D. 都不对 ( ) 3.关于两个同名函数重载的叙述, 选择最为正确的填入括号内。 A. 两个函数的参数个数不同 B. 两个函数对应的参数类型不同 C. 两个函数的参数个数不同或对应的参数类型不同 D. 都不对 ( ) 4.关于inline保留字的用途, 选择正确的叙述填入括号内。 A. 只能用于定义成员函数 B. 只能用于定义非成员函数 C. 能够定义成员函数及非成员函数 D. 都不对 ( ) 5.关于类的构造函数的定义位置, 将最为正确的叙述填入括号内。 A. 只能在private下定义 B. 只能在protected下定义 C. 只能在public下定义 D. 定义位置没有限制 ( ) 6.如下修饰类体中函数的返回类型, 将正确的用法填入括号内。 A. 同时使用static和friend B. 同时使用static和virtual C. 同时使用friend和virtual D. 不同时使用上述三个保留字中的任意两个 ( ) 7.在如下关于继承的叙述中, 选择正确的填入括号内。 A. 私有继承用于实现类之间的ISA关系 B. 保护继承用于实现类之间的ISA关系 C. 公有继承用于实现类之间的ISA关系 D. 都不对 ( ) 8.对于用union定义的类A, 选择正确的叙述填入括号内。 A. 类A能够作为某个类的基类 B. 类A能够作为某个类的派生类 C. 类A既不能作基类又不能作派生类 D. 类A既能够作基类又能够作派生类 ( ) 9.有关在类中声明友元函数的叙述, 将正确的答案填入括号内。 A. 只能在private下声明 B. 只能在protected下声明 C. 只能在public下声明 D. 声明位置没有限制 ( ) 10.在构造派生类A的对象时, 选择正确的叙述填入括号内。 A. 最先构造派生类A的基类 B. 最先构造派生类A的虚基类 C. 最先构造派生类A的数据成员对象 D. 都不对 二.多项选择题( 从下列各题四个备选答案选出二至四个正确答案, 并将其代号填在题干前的括号内。答案选错或未选全者, 该题不得分。每小题2分, 共10分) ( ) 11.将符号为分隔符的编号填入括号内。 A. m B. + C. { D. = ( ) 12.将用于定义类的保留字的编号填入括号内。 A. class B. struct C. int D. union ( ) 13.将用于释放p=new int[8]的内存的编号填入括号内。 A. free (p) B. delete p C. delete []p D. sizeof p ( ) 14.将派生类成员函数可访问的基类成员编号填入括号内。 A. private B. protected C. public D. 所有成员 ( ) 15.将不能重载的运算符函数的编号填入括号内。 A. ? : B. :: C. % D. << 三.填空题( 阅读以下程序并填空。每题1分, 共10分) class A{ class C: A{ int a; int g; protected: protected: int b; int h; public: public: int c; int c; }a; }c; class B: protected A{ struct D: B, C{ int d; int j; protected: protected: int e; B::b; public: }d; A::c; void main(void){ int f; int x; }b; } 16.对于main, 对象a的私有成员为___________________________。 17.对于main, 对象a的保护成员为___________________________。 18.对于main, 对象a的公有成员为___________________________。 19.对于main, 对象b的私有成员为___________________________。 20.对于main, 对象b的保护成员为___________________________。 21.对于main, 对象c的保护成员为___________________________。 22.对于main, 对象c的公有成员为___________________________。 23.对于main, 对象d的保护成员为___________________________。 24.对于main, 对象d的公有成员为___________________________。 25.main应使用语句x=__________取对象d的基类C的成员c的值。 四.名词解释( 每小题3分, 共15分) 26.标识符: 27.重载: 28.异常: 29.类型强制: 30.抽象类: 五.判断改错题( 阅读以下程序并判断各题是否正确, 对正确的就在其题号前打√; 错误的在其题号前打χ, 并在题干后的括号内更正。每小题3分, 共15分) #include <iostream.h> struct A{A( ){ cout<<'A';}}; struct B{B( ){ cout<<'B';}}; struct C: A{C( ){ cout<<'C';}}; struct D: virtual B, C{D( ){ cout<<'D';}}; struct E: A { C c; E( ): c( ){ cout<<'E';} }; struct F: virtual B, C, D, E{ F( ){ cout<<'F';} }; void main( ){ /*……*/ } ( ) 31.如main定义A a, 则输出为A。 ( ) ( ) 32.如main定义C c, 则输出为BAC。 ( ) ( ) 33.如main定义D d, 则输出为BACD。 ( ) ( ) 34.如main定义E e, 则输出为AACE。 ( ) ( ) 35.如main定义F f, 则输出为BCDEF。 ( ) 六.计算题( 阅读如下程序并计算执行结果。共20分) int x=2, y=x+30; struct A{ static int x; int y; public: operator int( ){ return x+y; } A operator ++(int){ return A(x++, y++); } A(int x=::x+2, int y=::y+3){ A::x=x; A::y=y; } int &h(int &x); }; int &A::h(int &x) { for(int y=1; y!=1 || x<201; x+=11, y++) if(x>200) { x-=21; y-=2;} return x-=10; } int A::x=23; void main( ){ A a(54, 3), b(65), c; int i, &z=i, A::*p=&A::y; i=b.x; //……………………………① z=a.x; //……………………………② i=c.*p; //……………………………③ i=a++; //……………………………④ i=::x+c.y; //……………………………⑤ i=a+b; //……………………………⑥ b.h(i)=7; //……………………………⑦ } 36.语句①执行结束后i= 。( 2分) 37.语句②执行结束后i= 。( 3分) 38.语句③执行结束后i= 。( 3分) 39.语句④执行结束后i= 。( 3分) 40.语句⑤执行结束后i= 。( 3分) 41.语句⑥执行结束后i= 。( 3分) 42.语句⑦执行结束后i= 。( 3分) 七.设计题( 20分) 43.如下复数类说明了五个成员函数, 请详细定义这五个函数的函数体。( 每个定义4分) class COMPLEX{ //real, imag分别为复数的实部和虚部, double real, imag; //若x=3+5i, 则x.real=3, x.imag=5 public: COMPLEX(double r=0, double i=0); COMPLEX& operator += (const COMPLEX &c); COMPLEX& operator ++ ( ); //复数的实部和虚部加1 COMPLEX operator – ( ) const; //将实部和虚部的符号求反 COMPLEX operator + (const COMPLEX &c) const; }; 面向对象程序设计模拟试卷一答案 一解: 1. A 2. D 3. C 4. B 5. C 二解: 各类的成员及其存取属性如下。 三解: main中每行的输出结果见如下注释。 A a; cout<<'\n'; //输出A B b; cout<<'\n'; //输出B C c; cout<<'\n'; //输出AC D d; cout<<'\n'; //输出BACD E e; cout<<'\n'; //输出AACE F f; cout<<'\n'; //输出BACACDAACEF 四解: 错误及其原因见注释。 class A{ static int a=0; //不能在类的体内初始化 protected: int b; public: int c; A(int); operator int( ); } a(1, 2); //没有定义A(int, int) class B: A{ B(int); virtual int d; //virtual不能用于数据成员 int e; public: A::b; //修改而不是恢复访问权限 friend int operator =(B); //不存在普通赋值函数的重载, =必须重载为双目的 static B(int, int); //构造函数不能定义为不带this参数的静态函数成员 } b=5; //B(int)是不可访问的私有构造函数 class C: B{ public: int operator++(double); //必须用int定义后置运算 }; //C必须定义构造函数, 因B定义有带参构造函数且没有无参构造函数 int main( ){ int *A::*p, i; i=a.a; //a.a是私有的, 不能被不是A的友元的main访问 i=A(4); i=b.c; //b.c是私有的, 不能被不是B的友元的main访问 p=&A::c; //A::c不是一个int *指针 i=b; //B不存在公有的B::operator int( )或B::operator A( ) return ; //返回void类型, 与main声明的返回类型不一致 } 五解: 变量i在每条赋值语句执行后的值见注解。 z=b.x; //i=4 i=a.x; //i=4 i=c.*p; //i=35 i=a++; //i=1 i=::x+c.y; //i=37 i=a+b; //i=-31 //A(4,3)++将A::x=a.x=b.x=c.x置为4, 普通成员a.y=4不变 b.h(i)=7; //i=7 六解: 本题所涉及的概念并不复杂, 值得注意的是分数的约分运算, 该运算实际上是一个单目运算。在重载约分运算时, 要选择只有一个操作数的运算符。另外, 在对分数进行加和乘以后, 最好对运算结果进行约分运算, 如果不约分不算错。函数成员如下。 FRACTION::FRACTION(int num, int den){ numerator=num; denominator=den; } int FRACTION::operator>(const FRACTION&f)const{ double d= denominator *f.denominator; return (numerator*f.denominator/d >denominator*f.numerator/d); } FRACTION FRACTION::operator*( )const{ int c=cmd(numerator, denominator); return FRACTION(numerator/c, denominator/c); } FRACTION FRACTION::operator+(const FRACTION&f)const{ int n= numerator*f.denominator+denominator*f.numerator; int d= denominator*f.denominator; return *FRACTION(n, d); //对运算结果进行约分运算 } FRACTION FRACTION::operator*(const FRACTION&f)const{ return *FRACTION(numerator*f.numerator, denominator*f.denominator); //约分 } 面向对象程序设计模拟试卷二答案 一解: 单项选择题答案 1. B 2. B 3. C 4. C 5. D 6. D 7. C 8. C 9. D 10.B 二解: 多项选择题答案 11.BCD 12.ABD 13.ABC 14.BC 15.AB 三解: 填空题答案 16. a.a 17. a.b 18. a.c 19. b.d 20. b.b, b.e 21. c.h 22. c.c 23. d.b, d.e, d.h 24. d.B::c, d.f, d.C::c, d.j 25. d.C::c 四解: 名词解释答案 26.标识符: 标识符是程序变量、 常量、 函数和类型的名字, 一般是由字母或下划线开始的字母、 数字或下划线等符号序列构成。( 要点: 仅回答名字或构成得2分, 全答得3分) 27.重载: 重载是指用一个标识符或操作符命名多个函数, 用于完成多个不同类型的操作。( 要点: 没有回答多个扣1分, 没有回答操作符可不扣分) 28.异常: 异常是指函数执行出现了不正常的现象、 或运行结果出现了无法定义的情况而必须中断程序执行的状态。( 要点: 未回答不正( 平) 常、 结果无法定义或中断执行, 可扣1分) 29.类型强制: 类型强制是指将一种类型映射或转换为另一种类型。( 要点: 没有映射或转换扣1分, 没有涉及两种类型扣1分) 30.抽象类: 抽象类是指定义了纯虚函数、 或继承了纯虚函数但没有定义函数体的类。或者抽象类是不能定义或产生实例对象的类。( 要点: 或者前后的两种回答都能够得分) 五解: 判断改错题答案 31.√ 32.X 改正: AC 33. √ 34. √ 35. X 改正: BACACDAACEF 六解: 计算题答案 36. i=4 37. i=4 38. i=35 39. i=7 40. i=37 41. i=47 42. i=7 七解: 设计题答案要点如下, 达不到要求各扣1分。 ①所有函数头必须包含COMPLEX:: ②构造函数定义时不能再次定义缺省参数 ③返回类型为COMPLEX&的&不能省略 ④返回类型为COMPLEX&的必须用return *this ⑤返回类型为COMPLEX的必须定义局部对象或使用常量对象 ⑥const不能漏掉, 凡尾部部带const的函数不能改变当前对象的值。 43. 五个成员函数如下。 COMPLEX::COMPLEX(double r, double i){ real=r; imag=i; } COMPLEX& COMPLEX::operator += (const COMPLEX &c){ real+=c.real; imag+=c.imag; return *this; } COMPLEX& COMPLEX::operator ++ ( ){//前置运算, 先运算后取值 real++; imag++; return *this; } COMPLEX COMPLEX::operator - ( ) const{ return COMPLEX(-real, -imag); } COMPLEX COMPLEX::operator + (const COMPLEX &c) const { return COMPLEX(real+c.real, imag+c.imag); }- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 模拟 试卷
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文