《2022年面向对象程序设计复习题.docx》由会员分享,可在线阅读,更多相关《2022年面向对象程序设计复习题.docx(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选学习资料 - - - - - - - - - 一、单项挑选题;1 引入内联函数的主要目的是 A缩短程序代码,少占用内存空间 B既可以保证程序的可读性,又能提高程序的运行效率 C提高程序的执行速度 D使程序的结构比较清楚 2 重载函数是 A以函数参数来区分,而不用函数的返回值来区分不同的函数 B以函数的返回值来区分,而不用函数参数来区分不同的函数 C参数表完全相同而返回值类型不同的两个或多个同名函数 D参数表和返回值类型都必需是不同的两个或多个同名函数3 有函数原型 void fun2 int *, 下面选项中,正确的调用是A double x = 2.17; fun2 &x; C int
2、a = 15; fun2 a*3.14;B int b = 100; fun2 & b; D fun2 256;4 在 C+中, 要实现动态联编 , 必需使用 调用虚函数;D 基类指A 类名B 派生类指针 C 对象名针 5 在公有派生情形下,有关派生类对象和基类对象的关系,以下表达不正确的 是 A派生类的对象可以直接拜访基类中的全部成员 B派生类的对象可以初始化基类的引用 C派生类的对象可以赋给基类的对象 D 派生类的对象的地址可以赋给指向基类的指针 6 设置虚基类的目的是 A排除两义性 B 简化程序 C提高运行效率 D 削减目标代码 7 关于构造函数,以下说法错误选项 A 构造函数的作用是在
3、对象被创建时使用特定的值构造对象,或者说 将对象初始化为一个特定的状态;在对象创建时由系统自动调用;B 基类的构造函数可以被派生类所继承;C 假如程序中未声明,就系统自动产生出一个缺省形式的构造函数;D 答应为内联函数、重载函数、带缺省形参值的函数;8 以下关于 C+函数的说明中,正确选项 A内联函数就是定义在另一个函数体内部的函数 B函数体的最终一条语句必需是 return 语句 C标准 C+要求在调用一个函数之前,必需先声明其原型 D编译器会依据函数的返回值类型和参数表来区分函数的不同重载形1 / 14 名师归纳总结 - - - - - - -第 1 页,共 14 页精选学习资料 - -
4、- - - - - - - 式9 由于常对象不能被更新,因此 A通过常对象只能调用它的常成员函数 B通过常对象只能调用静态成员函数 C常对象的成员都是常成员 D通过常对象可以调用任何不转变对象值的成员函数 10 以下关于虚函数的说明中,正确选项A从虚基类继承的函数都是虚函数 C只能通过指针或引用调用虚函数 B虚函数不得是静态成员函数 D抽象类中的成员函数都是虚函数11 运算符重载是对已有的运算符给予多重含义,因此 A可以对基本类型 如 int 类型的数据,重新定义 “ +”运算符的含义 B可以转变一个已有运算符的优先级和操作数个数 C只能重载 C+中已经有的运算符,不能定义新运算符 DC+中已
5、经有的全部运算符都可以重载 12 模板对类型的参数化供应了很好的支持,因此 A类模板的主要作用是生成抽象类 B类模板实例化时,编译器将依据给出的模板实参生成一个类 C在类模板中的数据成员都具有同样类型 D类模板中的成员函数都没有返回值 13 以下符号中可以用作 C+标识符的是 A_radius Bfoobar Celse D3room 14 以下语句中,错误选项 Aconst int buffer=256; Bconst int temp;Cconst double *point; Dconst double *rt =new double5.5;15 有如下程序:int x=3;do x -
6、= 2;coutx;while.-x ;执行这个程序的输出结果是A 1 B 3 0 C l-2 D 死循环 16 有如下程序:#include using namespace std;int main int *p ;*p = 9;2 / 14 名师归纳总结 - - - - - - -第 2 页,共 14 页精选学习资料 - - - - - - - - - coutThe value at p:*p;return 0; 编译运行程序将显现的情形是A够编译时显现语法错误,不能生成可执行文件 B运行时肯定输出: The value at p: 9 C运行时肯定输出: The value at p:
7、 *9 D运行时有可能出错 17 有如下程序:#include using namespace std;int main void functiondouble val ;double val;functionval;coutval;return 0; void functiondouble val val = 3; 编译运行这个程序将显现的情形是A编译出错,无法运行 B输出: 3 C输出: 3.0 D输出一个不确定的数 18 有如下类定义:class AA int a;public: int getRef constreturn &a; / int getValue constreturn
8、a; / void setint n consta=n; / friend void showAA aa const coutaa; / ;其中的四个函数定义中正确选项A B CD 19有如下程序:3 / 14 名师归纳总结 - - - - - - -第 3 页,共 14 页精选学习资料 - - - - - - - - - #include using namespace std;class Base public: void funcoutBase:funendl ; ;class Derived:public Base public: void fun coutDerived:funfun
9、 Dfun;20 下面是重载为非成员函数的运算符函数原型,其中错误选项 AFraction operator + Fraction, Fraction;BFraction operator - Fraction;CFraction& operator = Fraction&, Fraction;DFraction& operator += Fraction&, Fraction;21 有如下类定义:class Foo public: Fooint v:valuev / Foo / 4 / 14 名师归纳总结 - - - - - - -第 4 页,共 14 页精选学习资料 - - - - - -
10、 - - - private: Foo / int value = 0; / ;其中存在语法错误的行是A B C D 22 有如下类定义:class Point int x_, y_;public: Point:x_0, y_0 Pointint x, int y = 0:x_x,y_y ;如执行语句 Point a2, b3, *c4 ;就 Point 类的构造函数被调用的次数是 A2 次 B3 次 C4 次 D5 次 23 有如下程序:#include using namespace std;class A public: AcoutA ; AcoutA ; ;class B:public
11、 A A* p ;public: BcoutB ; p = new A; BcoutB ; delete p; ;int main B obj;return 0; 5 / 14 名师归纳总结 - - - - - - -第 5 页,共 14 页精选学习资料 - - - - - - - - - 执行这个程序的输出结果是ABAAABABABABAA CBAABAA DABAABA 24 有如下程序:#include using namespace std;class Base private: void funl constcoutfunl ; protected: void fun2 constc
12、outfun2 ; public: void fun3 constcoutfun3 ; ;class Derived:protected Base public: void fun4 constcoutfun4 ; ;int main Derived obj;obj.funl ; / obj.fun2; / obj.fun3; / obj.fun4; / return 0; 其中有语法错误的语句是A B C D 25 有如下程序:#include using namespace std;class Base public: void funlcoutBase endl ; 6 / 14 名师归
13、纳总结 - - - - - - -第 6 页,共 14 页精选学习资料 - - - - - - - - - virtual void fun2coutBaseendl ; ;class Derived:public Base public: void funlcoutDerivedendl ; void fun2coutDerivedendl ; ;void fBase &bb.funl ;b.fun2; int main Derived obj;fobj;return 0; 执行这个程序的输出结果是ABase BBase CDerived DDerived Base Derived Base
14、 Derived 26 有如下类声明:class SAMPLE int n;public: SAMPLE int i = 0: ni void setValueint n0; ;以下关于 setValue成员函数的实现中,正确选项 ASAMPLE:setValueint n0n = n0 ; Bvoid SAMPLE:setValueint n0n = n0 ; Cvoid setValueint n0n = n0; DsetValueint n0n = n0; );27以下函数模板的定义中,合法的是(Atemplate T absT xreturn x0.-x:x; Btemplate cl
15、ass T absT xreturn x0.-x:x; Ctemplate T absT xreturn x0.-x:x; ; Dtemplate T absT xreturn x0.-x:x 28以下程序的运行结果为();# include 7 / 14 名师归纳总结 - - - - - - -第 7 页,共 14 页精选学习资料 - - - - - - - - - class BASE public: BASEint icout ;调用基类 BASE的构造函数: iendl ; class A :public BASE public: A int a,int b:BASEa,b1b cou
16、t 调用派生类 A 的构造函数: a+bendl; private: BASE b1;void main A obj1,2; A 调用基类 BASE 的构造函数: 2 B 调用基类BASE 的构造函数: 1 调用基类 BASE 的构造函数: 1 调 用 基 类BASE 的 构 造 函数: 2 调用派生类 A 的构造函数: 3 调用派生类 A 的构造函数: 3 C 调用基类 BASE 的构造函数: 2 D 调用基类BASE 的构造函数: 1 调用派生类 A 的构造函数: 3 调 用 基 类BASE 的 构 造 函数: 329以下程序的运行结果为();# include class T publi
17、c: T int x a=x; b+=x ; ;static void display T c cout ” a=” c.at ” b=” c.bend l ; private: int a; static int b ; int T:b=5 void main T A3,B5;8 / 14 名师归纳总结 - - - - - - -第 8 页,共 14 页精选学习资料 - - - - - - - - - T:displayA;T:displayB; A a=3 b=8 B a=3 b=5 a=5 b=5 a=5 b=10 Ca=3 b=13 D a=3 b=8 a=5 b=13 a=5 b=1
18、3 30. 下面程序中对一维坐标点类 #include using namespace std ;class point public: Point 进行运算符重载point (int vaI) x=val ; (*this); retum point operator+ () x+ ;retum*this; point operator+( int ) point old=*this,+old ; int GetX () const retum x private: ; int x; ;int main () point a (10);cout (+a).GetX();couta+.GetX
19、 ();retum (); 编译和运行情形是 A)运行时输出 1011 B)运行时输出 1111 C)运行时输出 1112 D)编译有错 二、填空题;1 程序中有如下语句 forint i = 0 ; i5; i+cout*p + i, ;能够依次输出 int 型一维数组 DATA 的前 5 个元素;由此可知,变量 p 的定义及 初始化语句是 _;2 如下面程序运行时输出结果为 1, A, 10.1 2, B, 3.5 请将程序补充完整;,9 / 14 名师归纳总结 - - - - - - -第 9 页,共 14 页精选学习资料 - - - - - - - - - #include using
20、 namespace std;int main void testint, char,double _ ;test1,A,10.1;test2,B;return 0; void testint a, char b, double c couta,b,cendl ; 3 有如下类声明:class MyClass int i;private: int j;protected:int k;public:int m, n; ;其中,私有成员的数量为 _ ;4 有如下程序:#include using namespace std;class ONE public: virtual void fcoutl
21、 ; ;class TWO:public ONE public: TWOcout2 ; ;class THREE:public TWO public: virtual void fTWO:f ; coutf;return 0; 执行上面程序的输出是 _ ;5 有如下程序:#include using namespace std;class PARENT public: PARENTcoutPARENT ; ;class SON:public PARENT public: SONcout T1 FUNT2 n return n * 5.0 ; 如要求以int 型数据7 为函数实参调用该模板函数,
22、并返回一个double 型数据,就该 调用应表示为 _;9 设 有 数 组 和 指 针 变 量 定 义 为 : int a23=1, 2 , 3 , 4, 5 ,*p=&a02;就表达式 *p+1 的值为:;10 有 字 符 数 组 和 字 符 指 针 定 义 : char s1= ” string ”,char s2= ” char ” ; char *const ps=s1;就使用指针 ps 进行操作时,可以转变ps,但不能转变 ps;11. 设 Cat 是已定义的类,整型变量a 是 Cat 类的公有成员变量, p 是 Cat 类的对象指针,且已指向Cat 类的对象 c,就用指针 p 给整
23、型成员变量a 赋值 5 的语句为:;12在 C+语言中,运算符可以重载,运算符重载实质上就是函数的重载,运 算符重载实现的多态性属于:;13在 C+语言中,运算符可以重载,运算符重载实质上就是函数的重载,设后置运算符“+” 在类 A 的定义中被重载为成员函数,就对A 类对象 a 作运算a+,与该运算表达式等价的函数调用形式为:;14. 当爱护继承时,基类的成员在派生类中成为爱护成员,不能通过派生类的 对象来直接拜访该成员;15.在类中, _成员为类的全部对象所共享;12 / 14 名师归纳总结 - - - - - - -第 12 页,共 14 页精选学习资料 - - - - - - - - -
24、 16. 假如使用数组名作为函数参数,形实结合时,传递的是17. 有如下定义:class MA int value;public: MA (int n=0):valut(n) _;MA*ta,tb;其中 MA 类的对象名标识符是 _;18. 如将一个二元运算符重载为类的成员函数,其形参个数应当是 个;_ 19. 有如下程序:#include using namespace std ;class DA int k;public: ): k (x) DA(int x=1DA() coutk ; ;int main () DA d=DA (3),DA(3),DA(3) ;DA* p=new DA2
25、;deletep return0 ; 这个程序的输出结果是 _ ;20. C+语言中的多态性分为编译时的多态性和 三、简答题;1. 什么叫做友元函数,什么叫做友元类?_ 时的多态性;2什么叫做多态性,面对对象的多态性可以分为哪四类?3什么叫做作用域? C+中有哪几种类型的作用域?4对比简述 C语言中函数内静态局部变量与C+中类的静态成员变量的特点;5简述用虚函数实现动态多态性的三个关键之处;6什么是内联函数,它有哪些特点?7列出拷贝构造函数被调用的三种情形;8比较类的三种继承方式public 、protected 、private之间的差别;9什么是虚基类?有何作用?10什么是编译时的多态?详
26、细包括哪些类型?11函数模板与函数重载有哪些区分?13 / 14 名师归纳总结 - - - - - - -第 13 页,共 14 页精选学习资料 - - - - - - - - - 12构造函数与析构函数有什么作用?四、综合编程题;1函数编程:定义一函数模板swap,它能实现x、y 值的交换,在main 函数中用任意两个整数、两个浮点数分别使用这个函数模板;2函数编程:定义一函数void ContraryStrchar * str,它能实现字符串的逆序输出,在 main 函数中用任意字符串测试该函数;3类编程:定义一个表示工人的类 Worker,有两个一般数据成员工龄 age 和工资 pay,
27、有一个静态成员人数 sum;定义一个有二个参数的构造函 数,给 age 和 pay 赋值,令 sum+;给 sum初始化为 0,定义一个静态成员函数 getsum,用于获得 sum的值;在 main 函数中以不同的方式定义二个工人对象,分别用二个对象和类名 输出相应人数;4派生类和虚函数编程:3 种方式调用 getsum 函数并(1) 定义一个抽象类 Shape,并且供应二个纯虚函数:运算并返回面积函数 reArea及运算并返回体积函数 reVolume;(2) 由 Shape类派生 Cube(正方体)类 ,它包括私有数据成员 length(边长) ,仍包含构造函数和两个纯虚函数的实现;(3)
28、 由 Shape类派生 Ball(球形)类 ,它包括私有数据成员 radius(半径) , 也包含构造函数和两个纯虚函数的实现;注:球表面积公式 4 R 2,球体积公式 4 /3R 3 ;(4) 在 main 函数中创建矩形类、球类对象存入一个 shape类指针数组中,通过 for 循环将数组中各类图形的面积及体积输出;30分5运算符重载编程:(1) 设计一个简洁分数类 Fenshu,其包含两个整数的类数据成员分子 fenzi 、分母 fenmu,定义并实现一个有两个整数作参数的构造 函 数 , 并 定 义 一 个 普 通 成 员 函 数 show , 它 能 以“ fenzi/fenmu ” 格式输出分数;(2) 用成员函数方式重载+运算符,用友元函数方式重载- 运算符,实现分数类的 +和- 运算;(3) 在 main 函数中使用Fenshu 类和二个重载运算符进行+和 - 运算,并调用 show 函数进行输出;14 / 14 名师归纳总结 - - - - - - -第 14 页,共 14 页