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

下载本文档

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

文档简介

面向对象程序设计课程复习、成绩构成1、平时成绩:15分(考勤+作业)2、实验成绩:25分(实验+课程设计)3、考试成绩:60分一、考试题型选择题 30分填空题20分判断题15分简答5分程序分析20分程序编写10分二、选择题1. C+代码源文件的扩展名应为 ( B )A. c B. cpp C.obj D.exe2. 函数声明为:char fun(int a); float fun(char *p); int fun(int &b); 则以下函数调用语句正确的是 ( C )A. fun(5) B. int b; fun(&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. virtual5. 通过( A )方法可以在现有类基础上定义新类。A. 继承 B. 引用 C. 包含 D.封装6. 成员函数亦可声明为静态的,但是它不能直接访问类的( D )数据成员A. 私有 B. 静态 C. 常量 D. 非静态7. 若类B的定义中私有数据成员i为常数据成员,则( B )A. 数据成员i不能被一般的成员函数所访问B. 数据成员i的初始化可以在构造函数的函数体中实现C. 数据成员i可以被常成员函数访问和赋值D. 以上均不对8. 在编译时,将所调用的函数代码嵌入到主调函数中,这种嵌入到主调函数中的函数不能称为( D )A. 内置函数 B. 内联函数 C. 内嵌函数 D. 嵌套函数9. 存储以下数据,占用存储字节最多的是( D )A. NULL B. 0 C. 0 D. 0.010. 面向对象的程序是( D )两者的组合A. 算法和数据结构 B. 对象和函数C. 函数和算法 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. 513. 已有定义:char * p=ABC;则下面语句正确的是( D )A. *p=ABC; B. p0=A; C. p2=C; D. char c=p1;14. 已知f1和f2是同一类的两个成员函数,但f1不能直接调用f2,这说明( B )A. f1和f2都是静态函数 B. f1是静态函数,f2不是静态函数 C. f1不是静态函数,f2是静态函数 D. f1和f2都不是静态函数15. 下列关于函数模板与类模板的描述中,不正确的是( D ) A. 函数模板的实例化是由编译程序在处理函数调用时自动完成B. 类模板的实例化必须由程序员在程序中显式的指定C. 函数模板与类模板均可以显式调用D. 定义函数模板时可以使用多个类型参数,而类模板不可以16. 对于语句 couta;,下列描述中不正确的是( C ) A. “cout”是一个输出流对象 B. 该语句错误使用了运算符C. “”称作插入运算符 D. 该语句需要头文件iostream17. 下面运算符中,不能被重载的运算符是( C )A. = B. C. ?: D. 18. 以下不属于面向对象的程序设计语言的是( D ) A. C# B. C+ C. Java D. C19. 下列关于C+中运算符重载的描述中,错误的是( C )A. 运算符重载是对已有的运算符赋予多重含义B. 重载的运算符,其运算对象可以是自定义的数据类型C. 编译系统对重载运算符的选择,遵循函数模板的选择原则D. 运算符的重载实质上是函数的重载20. 假定p所指对象的值为5,p+1所指对象的值为8,则执行“(*p)+;”语句后,p所指对象的值为(A)A. 6 B. 9 C. 5 D. 821. 运算符重载时不需要保持的性质是(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. int &x=&k;24. 下列虚基类的声明中,正确的是( A )A. class B:virtual public A B. class virtual B:public AC. virtual class B:public A D. class B:public A virtual25. 已有定义virtual int area( )=0;下面关于该函数的解释中正确的是( A )A. 该函数是纯虚函数 B. 该函数返回值为0C. 该函数通常在派生函数中声明 D. 该函数的入口地址为026. 作为类的成员函数重载一个运算符时,如果参数表为空,通常情况下,说明该运算符有( B )个操作数A. 0 B. 1 C. 2 D. 3二、填空题27. 重载函数在 参数类型 或 参数个数 上不同,但函数名称相同。28. 若要把变量s定义为短整型变量k的引用,则所使用的定义语为 int &s = k 。29. 已有定义const int a=5; 则要定义一个常指针指向该变量a的语句是:const int *p=&a 30. 常对象中的数据成员必须通过_构造_函数才可以访问。31. 对象将其大部分实现细节隐藏起来,这种机制称为 封装 。32. C+中,专门用于定义重载运算符的关键字是 operator 。33. 用于存贮当前被调用的成员函数所在对象的起始地址的指针是_this_。34. 如果希望类的成员为该类所有对象所共享,可以使用关键字_static_来修饰。35. 在C+中,由继承而产生的新类,它的对象对同一个消息会作出不同的响应,这种特性被称为 多态 。36. 已有类A的定义,其中有成员函数int get_a()return a;则定义一个指针指向该函数的写法为 int *p = geta; 。37. class w static char a; char y2; int x; double fun(int a)x=a; return 0; ;则sizeof(w)的值为 8 。38. 从系统实现角度看,C+中的动态多态性是通过 虚函数 基类指针 来实现的。39. 语句 coutxendl; 中“”称为 插入 运算符。40. 在C+中,用户管理文件的I/O 操作需要头文件 。41. 在C+中,用于动态分配内存的运算符是 new 。42. 在类的定义中,通常用 构造 函数为对象分配内存空间,并可对类的数据成员进行初始化。43. 在C+中,继承间接共同基类时只保留一份成员的方法是 使用虚基类 。44. 现有如下定义:int x=B+2;char y= x=9?C: S; 则y是 C 。45. 假设类X的对象x是类Y的成员对象,则“Y Obj;”语句执行时,先调用类_X_的构造函数,再调用类_Y_的构造函数;而在程序结束析构时,先调用类_Y_的析构函数,再调用类_X_的析构函数。46. 对象的概念中,有静态和动态两种特征,其中静态特征称为 属性 ,可由数据表示,而动态特征称为行为,可由 方法 表示。47. 继承关系可以是public、 protected 和private。三、判断题48. 常数据成员只能通过构造函数的初始化表初始化。149. 类所占空间为数据成员和成员函数所占空间之和。050. char *str=abcd;执行str0=s;语句后,字符串变为sbcd。051. 类的析构函数在删除对象时调用,并可以重载。052. 构造函数不能声明为虚函数,而析构函数可以声明为虚函数。153. 用来存放对象地址的指针变量,可称为指向对象的指针。154. 字符串 CDU的长度是3,因此占用了3个字节的内存空间。055. 多重继承出现的二义性可以用作用域限定的方法消除。156. 运算符可以被重载,且可以提升优先级。057. 无论何种继承形式,派生类均不能直接访问基类的私有成员。158. C+中,定义类的关键字是public。059. 抽象类定义的目的是用它作为基类去建立派生类。060. 常对象中的数据成员就是常数据成员。061. 对象基本特点有耦合性、多态性、继承性和封装性。062. 构造函数有返回值,而析构函数没有返回值。063. 类定义的公用数据成员x,在类外可以直接赋值,如x=5;064. 若想输出时,数据靠右,并指定字段宽度为6,可用控制符setw(6)。165. 不出现类名,也可以直接定义对象。1四、简答题66. C+语言中,构造一个派生类需要做哪些工作?先声明一个基类,然后再声明一个类并且继承至我们的基类。这时我们的这个类就是基类的派生类。67. 什么是纯虚函数,什么情况下用到纯虚函数?纯虚函数是没有实现,只有声明的函数。纯虚函数一般用到抽象基类中,让每一个抽象基类的派生类都有一个公共的接口。即该纯虚函数。68. 什么叫虚基类,它的主要作用是什么?基类的派生类通过virtual方式继承,那么这个基类就是虚基类。虚基类是为了保证在继承间接共同基类时只保留一份成员。69. 如果重载运算符要满足交换律,有哪些方法实现?以友元函数的方式重载运算符。70. 类模板有什么作用?如何声明一个类模板。建立一个抽象的通用类。类型暂时不定,当调用的时候才指定。这样减少了代码量,增加了类的灵活性。声明一个类模板需要在一个类的声明前加上template71. 已知有类Test,公用成员函数display( ); 简要解释语句Test stu1; stu1.display( ); 并指出语句中的“对象”、“方法”和“消息”。stu1是一个对象 ,display()是一个方法 stu1.display()就是一个消息72. 用C+语言实现如下功能:用new分配一个字符串,名称为s。并将C+存放到该字符串s中,最后释放该内存。string *s = new string(“C+”);delete(s); 73. 假定有一个类,名称为A,有1个整形数据成员x。请写出该类析构函数和2个构造函数。A() A() A(int x):x(x)74. 假定有一个类,名称为B,是由类A保护继承而来,根据基类成员在派生类中的访问属性,填写下表。在基类的访问属性在派生类的访问属性私有不可访问公有保护保护保护五、程序分析题75. 下面程序中有一处错误,请用下划横线标出错误所在行并说明出错原因。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; couta(i,j); couta(3,3.5); return 0;出错原因: 有多个重载函数a实例与之匹配 76. 阅读程序,在横线处填上适当字句。#include#includeusing namespace std; template /声明一个类模板,虚拟类型名为typeclass A type x,y;public:A(type a, type b)x=a;y=b; type cmp()return ( x+y );int main()A cp1(6.6,3.6);A cp2(12,34);coutcp1.cmp()tcp2.cmp();return 0;输出结果为: 9 1234 77. 请在下划横线处填写程序的输出结果。class Point int x,y; public: Point(int x1=5,int y1=6)x=x1;y=y1; Point()coutxy is deleted.endl; ; void main() Point a; Point b(8,8); 输出结果为: 88 is deleted. 56 is deleted. 78. 阅读程序,在下划横线处填写适当字句。class Achar a;short 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();coutthe size of test is: sizeof(test) 0;y-;) if(y%3=0) couty-; 输出结果为: 963 80. 阅读程序,在下划横线处填写适当字句。class Aconst 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; /用常数333初始化数据成员bint main()const A test1(111); A test2(222);couttest1.get_a()ttest2.get_a()endl;return 0;输出结果为: 81. 阅读程序,在下划横线处填写适当字句。class A protected: int a; public: A() a = 1;class B1: public A public: B1();class B2: public A public: B2();class C: public B1,public B2 /C类由直接基类B 1和B 2公有派生 public: Derived() void Init(int b) B1:a = b; ; /b赋给基类B1的a成员 ;82. 下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。class base public: int x;class One:public base;class Two:public base;class OT:public One,public Twopublic: int func();void main() OT p;p.base:x; p.base:x不明确六、编程题 83. 假定有一个类,名称为A,有1个字符型的数据成员c和1个整形数据成员x。请写出该类的至少2个不同的构造函数形式。class Apublic:char c;int x;A()只写这几行就可以了A(char c):c(c)A(int x):x(x)A(char c,int x):c(c),x(x)84. 分别用new和malloc()分配一个有5个元素的整形数组,名称为a。int *a;a = new int5;a = (int *)malloc(5*sizeof(int);85. 完成一个求圆面积的小程序,要求如下: 定义一个基类:点类(Dot),包括x坐标和y坐标(公有或保护),从它派生一个圆类(Circle),增加私有数据成员r(半径);class Dotpublic:int x;int y;class Circle:public Dotprivate:int r;Circle(int r,int x = 0,int y = 0):r(r),x(x),y(y)void input()cout”输入圆的圆心横纵坐标和半径:”endl;cinxyr;float area()retur

温馨提示

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

评论

0/150

提交评论