面向对象程序设计复习2_第1页
面向对象程序设计复习2_第2页
面向对象程序设计复习2_第3页
面向对象程序设计复习2_第4页
面向对象程序设计复习2_第5页
已阅读5页,还剩18页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、实用标准文档 文案大全 面向对象程序设计课程复习 、成绩构成 1、平时成绩:15分(考勤+作业) 2、实验成绩:25分(实验+课程设计) 3、考试成绩:60分 一、考试题型 选择题 30分 填空题 20分 判断题 15分 简答 5分 程序分析 20分 程序编写 10分 二、选择题 1. C+代码源文件的扩展名应为 ( B ) A. c B. cpp C.obj D.exe 2. 函数声明为:char fun(int a); float fun(char *p); int fun(int &b); 则以下函数调用语句正确的是 ( C ) A. fun(5) B. int b; fun(&

2、amp;b); C. char *p; fun(p); D. int a; fun(a) 3. 标准输入流对象cin无法读取( C ) A. 数值 B. 字符串 C. 空白字符 D. 字符 4. 不是C+关键字的是( C ) A. mutable B. class C. Friend D. virtual 5. 通过( A )方法可以在现有类基础上定义新类。 A. 继承 B. 引用 C. 包含 D.封装 6. 成员函数亦可声明为静态的,但是它不能直接访问类的( D )数据成员 A. 私有 B. 静态 C. 常量 D. 非静态 7. 若类B的定义中私有数据成员i为常数据成员,则( D ) A.

3、数据成员i不能被一般的成员函数所访问 B. 数据成员i的初始化可以在构造函数的函数体中实现/不能再函数体中,只能通过参数初始化表 实用标准文档 文案大全 C. 数据成员i可以被常成员函数访问和赋值 D. 以上均不对 8. 在编译时,将所调用的函数代码嵌入到主调函数中,这种嵌入到主调函数中的函数不能称为( D ) A. 内置函数 B. 内联函数 C. 内嵌函数 D. 嵌套函数 9. 存储以下数据,占用存储字节最多的是( D ) A. NULL B. '0' C. 0 D. 0.0 10. 面向对象的程序是( D )两者的组合 A. 算法和数据结构 B. 对象和函数 C. 函数和算

4、法 D. 对象和消息 11. 如果调用带有默认参数的函数时缺少一个参数,则( C )参数就作为这一参数 A. 第1个 B. 中间1个 C. 最后一个 D. 系统随机选择 12. 假定A为一个类,则执行 A a, b2, *p=&a, c(*p);语句后,程序将要结束时,共调用该类析构函数的次数应为( C ) A. 2 B. 3 C. 4 D. 5 13. 已有定义:char * p=ABC;则下面语句正确的是( D ) A. *p=ABC; B. p0=A; C. p2='C' D. char c=p1; 14. 已知f1和f2是同一类的两个成员函数,但f1不能直接调用

5、f2,这说明( B ) A. f1和f2都是静态函数 B. f1是静态函数,f2不是静态函数 C. f1不是静态函数,f2是静态函数 D. f1和f2都不是静态函数 15. 下列关于函数模板与类模板的描述中,不正确的是( D ) A. 函数模板的实例化是由编译程序在处理函数调用时自动完成 B. 类模板的实例化必须由程序员在程序中显式的指定 C. 函数模板与类模板均可以显式调用 D. 定义函数模板时可以使用多个类型参数,而类模板不可以 16. 对于语句 cout>>a;,下列描述中不正确的是( C ) A. “cout”是一个输出流对象 B. 该语句错误使用了运算符 C. “>

6、>”称作插入运算符(提取) D. 该语句需要头文件iostream 17. 下面运算符中,不能被重载的运算符是( C ) A. <= B. C. ?: D. 18. 以下不属于面向对象的程序设计语言的是( D ) A. C# B. C+ C. Java D. C 19. 下列关于C+中运算符重载的描述中,错误的是( C ) 实用标准文档 文案大全 A. 运算符重载是对已有的运算符赋予多重含义 B. 重载的运算符,其运算对象可以是自定义的数据类型 C. 编译系统对重载运算符的选择,遵循函数模板(重载)的选择原则 D. 运算符的重载实质上是函数的重载 20. 假定p所指对象的值为5,p

7、+1所指对象的值为8,则执行“(*p)+;”语句后,p所指对象的值为( A ) A. 6 B. 9 C. 5 D. 8 21. 运算符重载时不需要保持的性质是( B ) A. 操作数个数 B. 操作数类型 C. 优先级 D. 结合性 22. 已有定义:char *str=abcd;则下面语句正确的是( C ) A. str0=a; B. str1='b' C. char c=str0; D. *str=xyzw; 23. 已知:int k=6;则下列语句中能正确表示引用的是( B ) A. int x=k; B. int &x=k; C. int &x=6; D

8、. int &x=&k; 24. 下列虚基类的声明中,正确的是( A ) A. class B:virtual public A B. class virtual B:public A C. virtual class B:public A D. class B:public A virtual 25. 已有定义virtual int area( )=0;下面关于该函数的解释中正确的是( A ) A. 该函数是纯虚函数 B. 该函数返回值为0 C. 该函数通常在派生函数中声明 D. 该函数的入口地址为0 26. 作为类的成员函数重载一个运算符时,如果参数表为空,通常情况下,说明

9、该运算符有( B )个操作数 A. 0 B. 1 C. 2 D. 3 二、填空题 27. 重载函数在 参数个数 或 参数类型 上不同,但函数名称相同。 28. 若要把变量s定义为短整型变量k的引用,则所使用的定义语为 short &s = k; 。 29. 已有定义const int a=5; 则要定义一个常指针指向该变量a的语句是: cons tint *p = &a 30. 常对象中的数据成员必须通过_常成员_函数才可以访问。 31. 对象将其大部分实现细节隐藏起来,这种机制称为 封装 。 32. C+中,专门用于定义重载运算符的关键字是 operator 。 33. 用于

10、存贮当前被调用的成员函数所在对象的起始地址的指针是_this_。 34. 如果希望类的成员为该类所有对象所共享,可以使用关键字_public_来修饰。 35. 在C+中,由继承而产生的新类,它的对象对同一个消息会作出不同的响应,这种特性被称为 多态性 。 36. 已有类A的定义,其中有成员函数int get_a()return a;则定义一个指针指向该函数的写法为 int (*p)(); p = get_a; 。 实用标准文档 文案大全 37. 已有定义const int a=5; 则要定义一个常指针指向该变量a的语句是: cons tint *p = &a 38. class w s

11、tatic char a; char y2; int x; double fun(int a)x=a; return 0; ; 则sizeof(w)的值为 8 。 39. 从系统实现角度看,C+中的动态多态性是通过 虚函数 来实现的。 40. 语句 cout<<x<<endl; 中“<<”称为 流插入 运算符。 41. 在C+中,用户管理文件的I/O 操作需要头文件 <iostream > 。 42. 在C+中,用于动态分配内存的运算符是 new 。 43. 在类的定义中,通常用 构造 函数为对象分配内存空间,并可对类的数据成员进行初始化。 44

12、. 在C+中,继承间接共同基类时只保留一份成员的方法是 虚基类 。 45. 现有如下定义:int x='B'+2;char y= x>='9'?'C': 'S' 则y是 ' C '。 46. 假设类X的对象x是类Y的成员对象,则“Y Obj;”语句执行时,先调用类_X_的构造函数,再调用类_Y_的构造函数;而在程序结束析构时,先调用类_Y_的析构函数,再调用类_X_的析构函数。 47. 对象的概念中,有静态和动态两种特征,其中静态特征称为 属性 ,可由数据表示,而动态特征称为行为,可由 函数 表示。 48.

13、继承关系可以是public、 protected 和private。 三、判断题 49. 常数据成员只能通过构造函数的初始化表初始化。 /正确 50. 类所占空间为数据成员和成员函数所占空间之和。 /错误,成员函数不在之内 51. char *str=abcd;执行str0='s';语句后,字符串变为sbcd。 /错误,不可修改 52. 类的析构函数在删除对象时调用,并可以重载。 /错误,析构函数不可重载 53. 构造函数不能声明为虚函数,而析构函数可以声明为虚函数。 /正确 54. 用来存放对象地址的指针变量,可称为指向对象的指针。 /错误,是存放对象起始地址 55. 字符串

14、 CDU的长度是3,因此占用了3个字节的内存空间。 /错误,长度为3,有结束符'0' 56. 多重继承出现的二义性可以用作用域限定的方法消除。 /正确 57. <<运算符可以被重载,且可以提升优先级。 /错误,运算符重载要保持其优先级 58. 无论何种继承形式,派生类均不能直接访问基类的私有成员。 /正确 实用标准文档 文案大全 59. C+中,定义类的关键字是public。 /错误,class 60. 抽象类定义的目的是用它作为基类去建立派生类。 /正确 61. 常对象中的数据成员就是常数据成员。 /错误,不要误认为常对象中的成员函数都是常成员函数,常对象只保证其

15、所有数据成员的值不被修改。 62. 对象基本特点有耦合性、多态性、继承性和封装性。 /错误,没有耦合性 63. 构造函数有返回值,而析构函数没有返回值。 /错误,都无返回值 64. 类定义的公用数据成员x,在类外可以直接赋值,如x=5; /错误,必须要有作用域限定 65. 若想输出时,数据靠右,并指定字段宽度为6,可用控制符setw(6)。 /正确,头文件为iomanip 66. 不出现类名,也可以直接定义对象。 /正确 四、简答题 67. C+语言中,构造一个派生类需要做哪些工作? 1) 从基类接收成员 2) 调整从基类接收的成员 3) 在声明派生类时增加的成员 68. 什么是纯虚函数,什么

16、情况下用到纯虚函数? 纯虚函数是在声明虚函数时被“初始化”为0的函数。 在基类中声名某一成员函数,并不是基类本身的要求,而是考虑到派生类的需要,在基类中预留了一个函数名,具体功能留给派生类根据需要去定义时,这时就用到纯虚函数 69. 什么叫虚基类,它的主要作用是什么? 当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),若只想保存这个基类的一个实例,可以将这个公共基类说明为虚基类。 主要作用: 当基类通过多条派生路径被一个派生类继承时,该派生类只继承该基类一次,也就是说,基类成员只保留一次。 70. 如果重载运算符要满足交换律,有哪些方

17、法实现? 实用标准文档 文案大全 1) 对运算符进行多次重载,可以将运算符重载函数都作为友元函数;也可将一个运算符重载函数(运算符左侧为对象名的)作为成员函数,另一个(运算符左侧不是对象名的)作为友元函数 2) 转换构造函数和友元重载运算符结合 71. 类模板有什么作用?如何声明一个类模板。 类模板作用: 对于某些功能一样、但是所操作的数据类型不一样的类,使用类模板能减少重复性的工作。 如何声明一个类模板: template <class 虚拟类型参数> /或者:tempate <typename 虚拟类型参数> class 类名 类声明体; ; 如何用类模板定义一个对

18、象: 类模板名 <实际类型名> 对象名; /或者:类模板名 <实际类型名> 对象名(实参列表); 72. 已知有类Test,公用成员函数display( ); 简要解释语句Test stu1; stu1.display( ); 并指出语句中的“对象”、“方法”和“消息”。 定义一个Test类的对象stu1,再通过对象stu1调用Test类中的成员函数; 对象:stu1、方法:display()、消息:stu1.display() 73. 用C+语言实现如下功能:用new分配一个字符串,名称为s。并将C+存放到该字符串s中,最后释放该内存。 char *s = new c

19、har4; strcpy(s, “C+”); delete s; 74. 假定有一个类,名称为A,有1个整形数据成员x。请写出该类析构函数和2个构造函数。 /无参 A() 实用标准文档 文案大全 x = 0; cout << “构造!” << endl; /含参 A(int a) x = a; /含参参数初始化表 A(int a):x(a) /析构 A() cout << “析构!” << endl; 75. 假定有一个类,名称为B,是由类A保护继承而来,根据基类成员在派生类中的访问属性,填写下表。 在基类的访问属性 在派生类的访问属性 私有 不

20、可公有 保护 保护 五、程序分析题 76. 下面程序中有一处错误,请用下划横线标出错误所在行并说明出错原因。 float a(int x,int y) float z; z=x+y; return z; int a(float x,float y) int z;z=x-y; return z; int main() int i=3;float j=3.5; cout<<a(i,j); cout<<a(3,3.5); return 0; 出错原因: 错误行:cout<<a(i,j);原因:有多个重载函数”a”实例与参数列表匹配 77. 阅读程序,在横线处填上适

21、当字句。 实用标准文档 文案大全 #include<iostream> #include<string> using namespace std; template <typename type> /声明一个类模板,虚拟类型名为type class A type x,y; public:A(type a, type b)x=a;y=b; type cmp()return ( x+y ); ; int main() A <int> cp1(6.6,3.6); A <string> cp2(12,34); cout<<cp1.

22、cmp()<<'t'<<cp2.cmp(); return 0; 输出结果为: 78. 请在下划横线处填写程序的输出结果。 class Point int x,y; public: Point(int x1=5,int y1=6)x=x1;y=y1; Point()cout<<x<<y<< is deleted.<<endl; ; void main() Point a; Point b(8,8); 输出结果为: 9 1234 79. 阅读程序,在下划横线处填写适当字句。 class A char a; s

23、hort b; public: void out() a=20;b=40; char *p; p = &a; cout << a=<<(short)(*p+) <<'t'<< b= << b << endl; ; int main() A test; test.out(); cout<<the size of test is:<< sizeof(test) <<endl; return 0; 输出结果为: a=20 b=40 实用标准文档 文案大全 the siz

24、e of test is: 4 80. 请在下划横线处填写程序的输出结果。 void main( ) int y=9; for( ;y>0;y-;) if(y%3=0) cout<<y-; 输出结果为: 963 81. 阅读程序,在下划横线处填写适当字句。 class A const int a; static int b; public: A(int x):a(x) /构造函数,用变量x初始化数据成员a int get_a() const return a; int get_a() return a+b; ; int A:b = 333; /用常数333初始化数据成员b i

25、nt main() const A test1(111); A test2(222); cout<<test1.get_a()<<'t'<<test2.get_a()<<endl; return 0; 输出结果为: 111 555 82. 阅读程序,在下划横线处填写适当字句。 class A protected: int a; public: A() a = 1; ; class B1: public A public: B1() ; class B2: public A public: B2() ; class C: publi

26、c B1, public B2 /C类由直接基类B 1和B 2公有派生 public: Derived() void Init(int b) B1:a = b ; /b赋给基类B1的a成员 ; 实用标准文档 文案大全 83. 下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。 class base public: int x; ; class One:public base; class Two:public base; class OT:public One,public Two public: int func(); ; void main() OT p; p.base:x;

27、出错行:p.base:x; 出错原因:基类base不明确,因为One类和Two类都由基类base直接共有派生而来,在One类和Two类中都含有成员变量x 六、编程题 84. 假定有一个类,名称为A,有1个字符型的数据成员c和1个整形数据成员x。请写出该类的至少2个不同的构造函数形式。 1.A(char newc, int newx):c(newc),x(newx)/含参 2.A()/不含参 c = 0' x = 0; 85. 分别用new和malloc()分配一个有5个元素的整形数组,名称为a。 int *a = new int5; int *a = (int *)malloc(siz

28、eof(int)* 5); 86. 完成一个求圆面积的小程序,要求如下: 定义一个基类:点类(Dot),包括x坐标和y坐标(公有或保护),从它派生一个圆类(Circle),增加私有数据成员r(半径); 圆类的函数成员包括构造函数、输入圆心坐标及圆半径的函数(input)、计算并返回面积的函数(area); 主函数中生成一个圆类对象crc,通过构造函数或input函数为数据成员赋值,圆心坐标为(6,6),半径为5。使用对象crc的函数成员area计算面积,主函数输出结果。 #include<iostream> using namespace std; 实用标准文档 文案大全 class Dot protected: int x, y; ; class Cirle:public Dot public: Ci

温馨提示

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

评论

0/150

提交评论