面向对象程序设计复习题带部分答案.docx
- 文档编号:23977186
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:21
- 大小:21.83KB
面向对象程序设计复习题带部分答案.docx
《面向对象程序设计复习题带部分答案.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计复习题带部分答案.docx(21页珍藏版)》请在冰豆网上搜索。
面向对象程序设计复习题带部分答案
一、单项选择题。
1引入内联函数的主要目的是
A)缩短程序代码,少占用内存空间
B.既可以保证程序的可读性,又能提高程序的运行效率
C)提高程序的执行速度
D)使程序的结构比较清晰
2重载函数是
A)以函数参数来区分,而不用函数的返回值来区分不同的函数
B.以函数的返回值来区分,而不用函数参数来区分不同的函数
C)参数表完全相同而返回值类型不同的两个或多个同名函数
D)参数表和返回值类型都必须是不同的两个或多个同名函数
3有函数原型voidfun2(int*),下面选项中,正确的调用是
A)doublex=2.17;fun2(&x);C)inta=15;fun2(a*3.14);
B)intb=100;fun2(&b);D)fun2(256);
4在C++中,要实现动态联编,必须使用()调用虚函数。
A)类名B)派生类指针C)对象名D)基类指针
5在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是
A)派生类的对象可以直接访问基类中的所有成员
B)派生类的对象可以初始化基类的引用
C)派生类的对象可以赋给基类的对象
D)派生类的对象的地址可以赋给指向基类的指针
6设置虚基类的目的是
A)消除两义性B)简化程序
C)提高运行效率D)减少目标代码
7关于构造函数,以下说法错误的是
A)构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象
初始化为一个特定的状态。
在对象创建时由系统自动调用。
B)基类的构造函数可以被派生类所继承。
C)如果程序中未声明,则系统自动产生出一个缺省形式的构造函数。
D)允许为内联函数、重载函数、带缺省形参值的函数。
8下列关于C++函数的说明中,正确的是
A)内联函数就是定义在另一个函数体内部的函数
B)函数体的最后一条语句必须是return语句
C)标准C++要求在调用一个函数之前,必须先声明其原型
D)编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式
9由于常对象不能被更新,因此
A)通过常对象只能调用它的常成员函数
B)通过常对象只能调用静态成员函数
C)常对象的成员都是常成员
D)通过常对象可以调用任何不改变对象值的成员函数
10下列关于虚函数的说明中,正确的是
A)从虚基类继承的函数都是虚函数B)虚函数不得是静态成员函数
C)只能通过指针或引用调用虚函数D)抽象类中的成员函数都是虚函数
11运算符重载是对已有的运算符赋予多重含义,因此
A)可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义
B)可以改变一个已有运算符的优先级和操作数个数
C)只能重载C++中已经有的运算符,不能定义新运算符
D)C++中已经有的所有运算符都可以重载
12模板对类型的参数化提供了很好的支持,因此
A)类模板的主要作用是生成抽象类
B)类模板实例化时,编译器将根据给出的模板实参生成一个类
C)在类模板中的数据成员都具有同样类型
D)类模板中的成员函数都没有返回值
13下列符号中可以用作C++标识符的是
A)_radiusB)foo~barC)elseD)3room
14下列语句中,错误的是
A)constintbuffer=256;B)constinttemp;
C)constdouble*point;D)constdouble*rt=newdouble(5.5);
15有如下程序:
intx=3;
do{
x-=2;
cout< }while(! (--x)); 执行这个程序的输出结果是 A)1B)30C)l-2D)死循环 16有如下程序: #include usingnamespacestd; intmain() { int*p; *p=9; cout<<"Thevalueatp: "<<*p; return0; } 编译运行程序将出现的情况是 A)够编译时出现语法错误,不能生成可执行文件 B)运行时一定输出: Thevalueatp: 9 C)运行时一定输出: Thevalueatp: *9 D)运行时有可能出错 17有如下程序: #include usingnamespacestd; intmain() { voidfunction(doubleval); doubleval; function(val); cout< return0; } voidfunction(doubleval) { val=3; } 编译运行这个程序将出现的情况是 A)编译出错,无法运行B)输出: 3 C)输出: 3.0D)输出一个不确定的数 18有如下类定义: classAA { inta; public: intgetRef()const{return&a;}//① intgetValue()const{returna;}//② voidset(intn)const{a=n;}//③ friendvoidshow(AAaa)const{cout< }; 其中的四个函数定义中正确的是 A)①B)②C)③D)④ 19有如下程序: #include usingnamespacestd; classBase { public: voidfun(){cout<<"Base: : fun"< }; classDerived: publicBase { public: voidfun() { cout<<"Derived: : fun"< } }; intmain() { Derivedd; ________________; d.fun(); return0; } 已知其执行后的输出结果为: Base: : fun Derived: : fun 则程序中下划线处应填入的语句是 A)Base.fun();B)Base: : fun()C)Base->fun()D)fun(); 20下面是重载为非成员函数的运算符函数原型,其中错误的是 A)Fractionoperator+(Fraction,Fraction); B)Fractionoperator-(Fraction); C)Fraction&operator=(Fraction&,Fraction); D)Fraction&operator+=(Fraction&,Fraction); 21有如下类定义: classFoo { public: Foo(intv): value(v){}//① ~Foo(){}//② private: Foo(){}//③ intvalue=0;//④ }; 其中存在语法错误的行是 A)①B)②C)③D)④ 22有如下类定义: classPoint { intx_,y_; public: Point(): x_(0),y_(0){} Point(intx,inty=0): x_(x),y_(y){} }; 若执行语句Pointa (2),b[3],*c[4]; 则Point类的构造函数被调用的次数是 A)2次B)3次C)4次D)5次 23有如下程序: #include usingnamespacestd; classA { public: A(){cout<<"A";} ~A(){cout<<"~A";} }; classB: publicA { A*p; public: B(){cout<<"B";p=newA();} ~B(){cout<<"~B";deletep;} }; intmain() { Bobj; return0; } 执行这个程序的输出结果是 A)BAA~A~B~AB)ABA~B~A~A C)BAA~B~A~AD)ABA~A~B~A 24有如下程序: #include usingnamespacestd; classBase { private: voidfunl()const{cout<<"funl";} protected: voidfun2()const{cout<<"fun2";} public: voidfun3()const{cout<<"fun3";} }; classDerived: protectedBase { public: voidfun4()const{cout<<"fun4";} }; intmain() { Derivedobj; obj.funl();//① obj.fun2();//② obj.fun3();//③ obj.fun4();//④ return0; } 其中有语法错误的语句是 A)①②③④B)①②③C)②③④D)①④ 25有如下程序: #include usingnamespacestd; classBase { public: voidfunl(){cout<<"Base"< virtualvoidfun2(){cout<<"Base"< }; classDerived: publicBase { public: voidfunl(){cout<<"Derived"< voidfun2(){cout<<"Derived"< }; voidf(Base&b){b.funl();b.fun2();} intmain() { Derivedobj; f(obj); return0; } 执行这个程序的输出结果是 A)BaseB)BaseC)DerivedD)Derived BaseDerivedBaseDerived 26有如下类声明: classSAMPLE { intn; public: SAMPLE(inti=0): n(i){} voidsetValue(intn0); }; 下列关于setValue成员函数的实现中,正确的是 A)SAMPLE: : setValue(intn0){n=n0;} B)voidSAMPLE: : setValue(intn0){n=n0;} C)voidsetValue(intn0){n=n0;} D)setValue(intn0){n=n0;} 27.下列函数模板的定义中,合法的是()。 A.template -x: x;} B.templateclass -x: x;} C.templateT -x: x;} D.templateTabs(Tx){returnx<0? -x: x;} 28.下列程序的运行结果为()。 #include classBASE {public: BASE(inti){cout<<"调用基类BASE的构造函数: "< }; classA: publicBASE {public: A(inta,intb): BASE(a),b1(b) {cout<<"调用派生类A的构造函数: "< private: BASEb1; }; voidmain() { Aobj(1,2); } A.调用基类BASE的构造函数: 2B)调用基类BASE的构造函数: 1 调用基类BASE的构造函数: 1调用基类BASE的构造函数: 2 调用派生类A的构造函数: 3调用派生类A的构造函数: 3 C)调用基类BASE的构造函数: 2D)调用基类BASE的构造函数: 1 调用派生类A的构造函数: 3调用基类BASE的构造函数: 3 29.下列程序的运行结果为()。 #include classT {public: T(intx){a=x;b+=x;}; staticvoiddisplay(Tc) {cout<<”a=”< private: inta; staticintb; }; intT: : b=5; voidmain() {TA(3),B(5); T: : display(A); T: : display(B); } A)a=3b=8B)a=3b=5 a=5b=10a=5b=5 C.a=3b=13D)a=3b=8 a=5b=13a=5b=13 30.下面程序中对一维坐标点类Point进行运算符重载 #include usingnamespacestd; classpoint { public: point(intvaI){x=val;} point&operator++(){x++;retum*this;} pointoperator++(int){pointold=*this,++(*this);retumold;} intGetX()const{retumx;} private: intx; }; intmain() { pointa(10); cout<<(++a).GetX();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 复习题 部分 答案