00710月《面向对象程序设计》试题-及答案
最新国家开放大学电大本科《面向对象程序设计》期末题库及答案
最新国家开放大学电大本科《面向对象程序设计》期末题库及答案考试说明:本人针对该科精心汇总了历年题库及答案,形成一个完整的题库,并且每年都在更新。
该题库对考生的复习、作业和考试起着非常重要的作用,会给您节省大量的时间。
做考题时,利用本文档中的查找工具,把考题中的关键字输到查找工具的查找内容框内,就可迅速查找到该题答案。
本文库还有其他网核及教学考一体化答案,敬请查看。
《面向对象程序设计》题库及答案一一、单项选择题(每小题2分,共20分)1.设x和y均为bool量,则x||y为假的条件是( )。
A.它们均为真 B.其中一个为真C.它们均为假 D.其中一个为假2.假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}}”,则元素a[1][2]的值为( )。
A.2 B.4 C.6 D.83.假定P是具有int* *类型的指针变量,则给P赋值的正确语句为( )。
A.p=new int B.p=new int*C.p=new int** D.p=new int[10]4.软件产品在需求发生变化、运行环境发生变化或发现软件产品本身的错误或不足时进行相应的软件更新的难易程度叫做软件的( )。
A.可维护性 B.可复用性C.兼容性 D.正确性5.若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字( )放在函数原型或函数头的前面。
‘A.in B.inlineC.inLine D.InLiner .6.在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾的后一个位置为( )。
A.1ength+1 B first+lengthC.(first+1ength—1)%MS D.(first+length)%MS7.假定一个类的构造函数为“A(int aa,int bb){a=aa;b=aa*bb;)”,则执行“A x(4,5);”语句后,X.a和x.b的值分别为( )。
《面向对象程序设计(Java)》机试题库(含答案)
《面向对象程序设计(Java)》机试题库(含答案)1.编写一个字符界面的Java Application 程序,接受用户从键盘输入的一个正整数,然后统计并输出从1到这个正整数的累加和。
2.编写一个字符界面的Java Application 程序,接受用户输入的10个整数,并输出这10个整数的最大值和最小值。
3.编写一个完整的Java Applet 程序使用复数类Complex验证两个复数1+2i 和3+4i 相加产生一个新的复数4+6i 。
复数类Complex必须满足如下要求:(1)复数类Complex 的属性有:RealPart : int型,代表复数的实数部分ImaginPart : int型,代表复数的虚数部分(2)复数类Complex 的方法有:Complex( ) : 构造函数,将复数的实部和虚部都置0Complex( int r , int i ) : 构造函数,形参r 为实部的初值,i为虚部的初值。
Complex complexAdd(Complex a) : 将当前复数对象与形参复数对象相加,所得的结果仍是一个复数值,返回给此方法的调用者。
String ToString( ) : 把当前复数对象的实部、虚部组合成a+bi 的字符串形式,其中a 和b 分别为实部和虚部的数据。
4.编写一个学生类Student ,要求:(1) 学生类Student 属性有:id : long型,代表学号name : String类对象,代表姓名age : int型,代表年龄sex : boolen型,代表性别(其中:true表示男,false表示女)phone : String类对象,代表联系电话(2) 学生类Student的方法有:Student(long i , String n , int a , boolean s , long p): 有参构造函数,形参表中的参数分别初始化学号、姓名、年龄、性别和联系电话。
《Java面向对象程序设计》考试卷及答案带注释
一、单选题(每小题1分,共30分)之欧侯瑞魂创作1.在MyEclipse中,()视图可以将项目中包含的文件及条理结构展示出来。
CA) PackageB)Declaration C)Navigator D) Console2.下列标识符中,正确的是()。
CA)classB) 123_rr C) _lei D) test&123.下列的()选项可以正确用以暗示八进制值8。
0x代表16进制,0代表8进制 DA)0x8 B)0x10 C)08 D)0104.以下哪个不是Java的原始数据类型()DA) int B) booleanC) float D) Char引用数据类型5.下列有关Java布尔类型的描述中,正确的是()AA)一种基本的数据类型,它的类型名称为booleanB)用int暗示类型C)其值可以赋给int类型的变量D)有两个值,1代表真,0代表假6.在Java中,不属于整数类型变量的是( ) AA) double浮点型B) longC) intD) byte7.以下do-while语句构成的循环执行次数是()。
Bint k=0;do { ++k ;}while(k<1);A) 一次也不执行B) 执行1次C) 无限次D) 有语法错误,不克不及执行8.表达式(1/0<1)&& (12==0) 的值为()。
逻辑运算结果只有true和falseA) true B) false C) 0 D) 运行时抛出异常9.以下()表达式不成以作为循环条件 AA) i=5B )i<3 C) count==i D) bEqual=str.equals("q") 10.下列数组初始化正确的是() DA) int score[5] = {90,12,34,77,56};B) int[5] score = new int[];C) int[] score = new int[5]{90,12,34,77,56};D) int score[] = new int[]{90,12,34,77,56};11.若有定义:byte[] x={11,22,33,-66};其中0≤k≤3,则对x数组元素错误的引用是() CA) x[5-3]B) x[k]C) x[k+5] D) x[0]12.以下代码的输出结果是()。
湖工大07 面向对象程序设计 考试参考答案(B卷)
三、填空题
(评分标准:每空2分,共10分,等价写法给满分)
(1)n<0
(2)return 1
(3)2*TwoTimes(n-1)
(4)new Number(5)
(5)p->GetNum()
四、阅读下面的程序,写出程序运行的结果。(共26分)
1.程序1
答:(评分标准:a和c正确分别得3分)
#include <iostream>
using namespace std;
class doctor
{
private:
int Num;
string Name;
int Age;
char Sex;
public:
int GetNum() { return Num;};
doctor(int Num0=1001, string Name0="彭博士", int Age0=30,char Sex0='1')
}
int main()
{
doctor s1,s2(1002,"周博士",28,'0'),*p;
s1.display();
s2.display();
p = new doctor(1003,"马博士",29,'0');
p->display();
delete p;
return 0;
}
Complex t;
t.real = real + b.real;
t.image = image + b.image;
return t;
《面向对象程序设计》期末考核试题样例及解答
《面向对象程序设计》期末考核试题样例及解答一、单项选择(每小题1分,12小题,共12分)1. 源程序文件的缺省扩展名为( )。
A. B. C. D.2. x>0 5的相反表达式为()。
A. x<=0 5B. x<=0 5C. x>0 5D. x>0 53. 在下面的字符数组定义中,有语法错误的是( )。
A. a[20]=“”;B. a[]=“55.”;C. a[15];D. a[10]=’5’;4. 以下正确的函数原型语句是( )。
A. ( y)B. ( y)C. ();D. ( );5. 在下面存储类中,()的对象不是局部变量。
A. 外部静态类B. 自动类C. 函数形参D. 寄存器类6. 假定有“ { [40]; ;}; * ;”,则正确的语句是()。
A. (>,””);B. (,””);C. (*,””);D. ((*)->,””);7. 软件产品所具有的全部或部分地再用于新的应用的能力称为该软件的()。
A. 可维护性B. 可复用性C. 兼容性D. 正确性8. 在多文件结构的程序中,通常把含有()函数的文件称为()。
A. 主文件B. 实现文件C. 程序文件D. 头文件9. 在一个用链表实现的队列类中,假定每个结点包含的值域用表示,包含的指针域用表示,链队的队首指针用表示,队尾指针用表示,若链队为空,则进行插入时必须把新结点的地址赋给( )。
A. B.C. 和D. 或10. 假定为一个类,则执行“ a, b(2), c[3], *;”语句时共调用该类无参构造函数的次数为( )。
A. 5B. 6C. 3D. 411. 引入友元的主要目的是为了()。
A. 增强数据安全性B. 提高程序的可靠性C. 提高程序的效率和灵活性D. 保证类的封装性12. 如果是类B在类A的基础上构造,那么,就称()。
A. 类A为基类或父类,类B为超类或子类B. 类A为基类、父类或超类,类B为派生类或子类C. 类A为派生类,类B为基类D. 类A为派生类或子类,类B为基类、父类或超类二、填空(每空1分,15小题,共18分)1. 语言是在语言的基础上发展起来的。
面向对象测试题及答案
面向对象测试题及答案一、选择题(每题2分,共20分)1. 面向对象编程(OOP)的核心概念不包括以下哪一项?A. 类B. 继承C. 多态D. 过程2. 在Java中,以下哪个关键字用于定义类?A. classB. typeC. structD. interface3. 下列哪个选项不是Java中访问控制的关键字?A. publicB. privateC. protectedD. global4. 封装是面向对象编程的一个重要特性,它主要指的是:A. 将数据和操作数据的方法组合在一起B. 将所有数据都设为公开访问C. 只允许通过特定的方法访问数据D. 将数据和方法分离5. 在Java中,以下哪个不是构造方法的特点?A. 与类名相同B. 没有返回类型C. 可以重载D. 可以被继承6. 继承在面向对象编程中允许:A. 一个类只能继承一个类B. 一个类可以继承多个类C. 一个类可以继承多个接口D. 一个类可以同时继承多个类和接口7. 接口在Java中的主要作用是:A. 定义类B. 实现多继承C. 定义方法的实现D. 定义方法的签名8. 以下哪个是Java中实现多态的方式?A. 继承B. 接口C. 重载D. 重写9. 抽象类在Java中不能:A. 被实例化B. 包含抽象方法C. 包含具体方法D. 被继承10. 下列哪个不是Java集合框架中接口?A. ListB. SetC. MapD. Array二、简答题(每题5分,共30分)1. 简述面向对象编程的三大特性。
2. 解释什么是多态,并给出一个Java中多态的例子。
3. 什么是封装?封装在Java中是如何实现的?4. 什么是接口?接口和抽象类有什么区别?5. 什么是构造方法?构造方法的作用是什么?6. 什么是继承?继承在Java中是如何实现的?三、编程题(每题25分,共50分)1. 编写一个Java程序,定义一个名为`Car`的类,包含以下属性和方法:- 属性:品牌(String类型),颜色(String类型),速度(int 类型)- 方法:启动汽车(startCar),加速(accelerate),减速(decelerate)2. 在上述`Car`类的基础上,创建一个名为`ElectricCar`的子类,继承`Car`类,并添加一个额外的属性:电池电量(int类型),并重写`startCar`方法以显示电动汽车启动的信息。
全国2005年10月高等教育自学考试面向对象程序设计参考答案
全国2005年10月高等教育自学考试面向对象程序设计参考答案一、单项选择题(本大题共l2小题,每小题2分:共24分)1.B2.B3.C4.A5.B6.C7.C8.C9.D 10.C11.C 12.D二、填空题(本大题共8小题,每小题2分,共16分)13.名称类型和个数14. ~MyClass() 115.X Y16. 私有保护17. 动态静态18. static 成员名限定19. 封装类族20. const 常成员函数(或const成员函数)三、改错题(本大题共5小题:每小题2分,共l0分)说明:各小题中,指出错误得l分,说明出错原因或改正正确得l分。
21.MyClass obj;出错,引用性说明所说明的类名不能用来建立对象22.cout<<a.p<<endl;出错,类外不能访问保护成员23.p.base::x;出错,出现二义性。
24. Base a;出错,抽象类不能定义对象。
25.x=a;出错,应该为A::x=a;。
四、完成程序题(本大题共5小题,每小题4分,共20分,每填对一行给2分)26.①”*”;(2分)②”+”(2分)27.①X=a.X;Y=a.Y; (2分)②delete []Ptr (2分)28.①friend class (2分)②p1(xp1),p2(xp2) (2分)29.①delete []pA (2分)②size (2分)30. ①a.real+b.real,a.image+b.image(2分)②*this(2分)五、程序分析题(本大题共6小题i每小题5分,共30分)3l.B(11)D(11,22)11,22~D()~B()32. 构造函数被用(4,5)构造函数被用(1,2)33.A::f()B::f()34.1 2 34 5 67 8 9 35.1 2 3 4 56 78 9 10 11 36.n=1,X=12n=2,X=34n=1。
面向对象程序设计习题及答案
面向对象程序设计一、选择填空1. 关于C + +与C语言的关系描述中,(D)是错误的。
(A)C语言是C + +的一个子集 (B) C语言与C++是兼容的(C) C++对C语言进行了一些改进(D) C++和C语言都是面向对象的2. 下面关于对象概念的描述中,(B)是错误的。
(A )对象就是C语言的结构变量(B)对象代表着正在创建的系统中的一个实体(C)对象是一个状态的操作(或方法)的封装体(D)对象之间的信息传递是通过消息进行的3. 下面关于类概念的描述中,(D)是错误的。
(A )类是抽象数据类型的实现(B )类是具有共同行为的若干对象的统一描述体(C)类是创建对象的样板(D)类就是C语言的结构类型4. 按照标识符的要求,(A )符号不能组成标识符。
(A )连接符 (B)下划线 (C)大小写字母 (D)数字字符5. 下列符号中,(C)不可作为分隔符。
(A), (B) : (C)? ( D);6. 在16位机中,int型字宽为(A)字节。
(A ) 2 ( B) 4 ( C) 6 (D) 87. 类型修饰符unsigned修饰(D)类型是错误的。
(A)char ( B) int (C) long int (D) float& 对于int *pa[5];的描述,(D)是正确的。
(A)pa是一个指向数组的指针,所指向的数组是5个int型元素(B)pa是一个指向某数组中第5个元素的指针,该元素是int变量(C)pa[5]表示某个数组的第5个元素(D)pa是一个具有5个元素的指针数组,每个元素是一个int型指针。
9. 下列关于指针的运算中,(D)是非法的。
(A)两个指针在一定条件下,可以进行相等或不等的运算。
(B)可以有一个空指针赋值给某个指针。
(C)一个指针可以加上一个整数。
(D)两个指针在一定条件下,可以相加。
10. 指针可以用来表示数组元素,下列表示中( A )是错误的。
已知:int a[3][7];(A)*(a+1)[5] ( B) *(*a+3) (C) *(*(a+1)) (D) *(&a[0][0]+2)11. 下列表示引用的方法中,(A )是正确的。
面向对象程序设计复习题及参考答案
网络教育课程考试复习题及参考答案面向对象程序设计一、填空题:1.创建类的对象时,使用运算符___________给对象分配内存空间。
2.Java通过来区分重载函数。
3.在子类中使用保留字_ _可调用被子类覆盖的父类中的方法。
4.使用保留字可以从一个构造方法中调用同一个类的另一个构造方法。
5.抽象类用修饰符定义。
6.类的数据成员的访问权限修饰符一般为7.访问权限修饰符按照访问权限的大小从大到小分别为、、、。
8.定义类的构造方法不能有,其名称与名相同。
9.抽象方法是的特征是。
10.Java中的所有异常都是从继承来的。
11.对象引用中存储的内容是。
12.下列程序段执行后,String str1 = new String("Java");String str2 = new String("Java");if (str1.equals(str2)) {System.out.println("They are equal");} else {System.out.println("They are not equal");}输出结果为:。
13.下面循环执行后的sun值为int count =0, sum = 0;while ( count <10 ) {sum += count;count ++;}14.Java语言中关键字_ _表示双精度类型。
15.保留字_ _用于导入包中的类到程序中,供程序中使用。
16.Java语言中继承是用保留字表示。
17.面向对象程序设计中,类是指。
18.对象包含和。
19.若有类定义:class B extends A{…}则类B是类A的_ 。
20.Java语言中, 通常把可能发生异常的方法调用语句放到try块中,并用紧跟其后的_ 块来捕获和处理异常。
21.多态是指。
22.声明常量时使用修饰符。
23.Java中异常抛出使用保留字。
(完整版)c++面向对象程序设计试题和答案
系名____________班级____________姓名____________学号____________密封线内不答题一、 填空题(每空1分,共14分)1、 观看以下程序:class point{public:void show() {cout<<”point ”<<endl;} }; void main() { point p1; point *p; p=&p1; _______________//通过对象p1访问show 函数 ______________//通过指针p 访问show 函数 } 2、 在C++类中可以包含______________、______________和______________三种具有不同访问控制权的成员。
3、 定义类时,在类头中将使用关键字_____________来表示类定义的开始。
4、 如果一个类中至少有一个纯虚函数,则该类称为________________。
5、 C++类的组成包括数据成员和______________,友元_____(是、不是)该类的成员函数。
6、 友员函数是用关键字____________修饰的非成员函数。
7、 若有: int i; int &j=i; i=10; j=i+1; 则i=__________,j=__________。
8、 new 的功能是____________________,delete 的功能是____________________。
二、 选择题(每小题1.5分,共30分)1、下列特性中不是面向对象程序设计语言所特有的是( )。
(A )数据封装 (B )继承(C )多态性 (D )模板2、( )是给变量取一个别名,它引入了变量的同意词。
(A)指针(B)引用(C)枚举(D)结构3、类成员的访问权限中,()只能被本类的成员函数和其友元函数访问。
(A)share (B)public (C)private (D)protected4、关于构造函数,下列说法不正确的是()。
10月全国面向对象程序设计自考试题及答案解析
全国2019年10月高等教育自学考试面向对象程序设计试题课程代码:02328一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1.下列特性中,C与C++共有的是( )A.继承B.封装C.多态性D.函数定义不能嵌套2.通常情况下,函数模板中的类型参数个数不能..是( )A.0B.2C.4D.33.在下列成对的表达式中,运算符“+”的意义不相同...的一对是( )A.5.0+2.0和5.0+2B.5.0+2.0和5+2.0C.5.0+2.0和5+2D.5+2.0和5.0+24.类的指针成员的初始化是通过函数完成的,这个函数通常是( )A.析构函数B.构造函数C.其它成员函数D.友元函数5.要禁止修改指针p本身,又要禁止修改p所指向的数据,这样的指针应定义为( )A.const char *p=“ABCD”;B.char const *p=“ABCD”;C.char *const p=“ABCD”;D.const char * const p=“ABCD”;6.静态成员函数没有..( )A.返回值B.this指针C.指针参数D.返回类型7.当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中( )A.都是虚函数B.只有被重新说明时才是虚函数C.只有被重新说明为virtual时才是虚函数D.都不是虚函数8.下面叙述不正确...的是( )A.派生类一般都用公有派生B.对基类成员的访问必须是无二义性的C.赋值兼容规则也适用于多重继承的组合D.基类的公有成员在派生类中仍然是公有的19.在C++中实现封装是借助于( )A.枚举B.类C.数组D.函数10.所有在函数中定义的变量,都是( )A.全局变量B.局部变量C.静态变量D.寄存器变量二、填空题(本大题共10小题,每小题2分,共20分)不写解答过程,将正确的答案写在每小题的空格内。
《面向对象程序设计C--》期末试卷及标准答案集总解析
《面向对象程序设计C++》期末考试试卷(B)班级:姓名:学号:分数:试卷说明:本套试题共四个大题,全部题目都答在答题纸上,写在其他地方均无效。
(答题纸在本套试卷的第8页上)】一、单项选择题(每小题2分,共40分)1、关于C++与C语言关系的描述中,( D )是错误的。
A.C语言是C++语言的一个子集B.C语言与C++语言是兼容的C.C++语言对C语言进行了一些改进D.C++语言和C语言都是面向对象的2、已知:int m=10; 下列表示引用的方法中,(A )是正确的。
A.int &x=m; B.int &y=10; C.int &z; D.float &t=&m;3、考虑下面的函数原型声明:void testDefaulParam(int a,int b=7,char z='*');下面函数调用中,不合法的是( C )。
>A.testDefaulParam(5); B.testDefaulParam(5,8); C.testDefaulParam(5,'#'); D.testDefaulParam(0,0,'*');4、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的是( A )。
A.函数的返回值类型B.参数的类型C.函数名称D.参数个数5、下列有关C++类的说法中,不正确的是( D )。
A.类是一种用户自定义的数据类型B.只有类中的成员函数或类的友元函数才能存取类中的私有成员C.在类中,如果不做特别说明,所有成员的访问权限均为私有的^D.在类中,如果不做特别说明,所有成员的访问权限均为公用的6、已知X类,则当程序执行到语句X array[3];时,调用了(D )次构造函数。
A.0 B.1 C.2 D.37、有关析构函数的说法,不正确的是( B )。
A.析构函数有且仅有一个B.析构函数和构造函数一样可以有形参C.析构函数的功能是在系统释放对象之前作一些内存清理工作D.析构函数无任何函数类型。
面向对象程序设计习题
1.面向对象程序设计中的数据隐藏指的是参考答案为: DA.输入数据必须输入保密口令B.数据经过加密处理 C. 对象内部数据结构上建有防火墙D.对象内部数据结构的不可访问性解析输入数据必须输入保密口令和数据经过加密处理都不是面向对象程序设计的特征;对象内部数据结构上也不可能建有防火墙,所以它们都不是面向对象程序设计中所指的数据隐藏;面向对象程序设计系统中的封装单位是对象,对象之间只能通过接口进行信息交流,外部不能对对象中的数据随意地进行访问,这就造成了对象内部数据结构的不可访问性,也使得数据被隐藏在对象中;这就是面向对象程序设计中的数据隐藏所指;2.下列各项中符合函数重载必须满足的条件的是参考答案为:DA.必须有不同的参数个数B.对应的参数类型必须不相同 C. A和B必须同时满足D.A和B只要满足一个即可解析我们知道,在同一个作用域中,要实现函数重载必须满足的条件的是:① 有不同的参数个数;或者② 对应的参数有不相同的数据类型,即①和②中只要有一个满足就可以了;当然两者都满足更好,但这不是必须的;3.下列带缺省值参数的函数说明中,正确的说明是参考答案为:AA.int Funint x,int y=2,int z=3; B.int Funint x=1,int y,int z=3;C. int Funint x,int y=2,int z; D.int Funint x=1,int y,int z=3;解析在带缺省值参数的函数说明中,正确的说明应该是无缺省值的参数依次排列在参数表的左边,排完无缺省值的参数后,再依次排列带缺省值的参数;从所给出的四个选项来看,只有“int Funint x,inty=2,int z=3”符合这条规定,其它的都不符合;4.有如下的对类“CSample”的说明,其中是错误的;class CSample { 参考答案为:AA.int a=23;B.CSample;public:C.CSampleint val;D.~ CSample;}解析在上面对类“CSample”说明中,“CSample”和“CSampleint val”是该类重载的构造函数、“~ CSample”是该类的析构函数,这三个语句都是正确的;错误的语句是“int a=23”,因为它违反了在类的声明不管是引用性声明,还是定义性声明中都不能以赋值表达式的形式给它的数据成员进行初始化; 5.已知类A中的一个成员函数的说明如下:void SetA &a;则该函数的参数“A &a”的含义是参考答案为:CA.指向A的指针为aB.将变量a的地址赋给类AC.类A对象引用a用作函数的形参D.变量A与a按位与后作函数参数解析因为A是一个类,所以“A &a”表示a是类A的对象,但因为对象a的前缀了符号“&”,则“&a”表示是类A的对象引用;所以“A &a”的含义是类A对象引用a用作函数的形参;6.若类A和类B的定义如下:class A {public:int i,j;void get;};class B:A {int i,j;protected:int k;public:void make;};void B::make { k=ij; }则其中是非法的表达式; 参考答案为:DA.void get;B.int k;C.void make;D.k=ij;解析对于给定的四项中,前三项都是正确的,只有第四项是错误的;因为,类B是类A的私有派生类缺省访问类型,所以A中的公类型的数据成员在类B中成为了私有数据成员,但函数“void B::make”既然是类B的成员函数,则既可访问类A中的公有数据成员,也能访问类B中的私有数据成员,则表达式“k=ij;”造成了访问的二义性,即其中的i和j,到底是取自类A呢还是取自类B呢7.下面的主程序中,语句是错误的;class A {int i;public:virtual void fun=0;Aint a { i=a; }};class B {int j;public:void fun { cout<<”B::fun\n”; }Bint b,int c :Ab { j=c; }};void main 参考答案为:AA.{ A a5;B.A pa;C.B b7;D.B pb;}解析在类A中,函数“virtual void fun=0”为纯虚函数,因此,类A为抽象类;作为抽象类,它是不能被用来定义具体对象的,而语句“A a5;”恰恰是定义抽象类的对象的,所以它是错误的8.拷贝复制构造函数的作用是参考答案为:CA.进行数据类型的转换B.用对象调用成员函数C.用对象初始化对象D.用一般类型的数据初始化对象解析进行数据类型的转换和用一般类型的数据初始化对象都是一般构造函数的功能;用对象调用成员函数不用构造函数,只要用“对象名.成员函数名”即可;所以拷贝复制构造函数的作用,只能是用对象来初始化对象;9.下列说法中,正确的说法是参考答案为:BA.所有的运算符都能被重载B.运算符被重载时,它们的优先级与结合性不会改变C.当需要时,我们可以自定义一个运算符来进行重载D.每个运算符都可以被重载成成员函数和友元函数解析当重载运算符时,不是所有的运算符都能被重载,有几个运算符是不能被重载的,如三元运算符“:”、‘.’、‘’、‘::’、‘’等;也不是每个运算符都可以被重载成成员函数和友元函数,如运算符‘=’、‘’、‘’、和‘→’都只能被重载成成员函数;无论何时,都不能自定义运算符来进行重载,也即重载只能对已有运算符进行;但是运算符被重载时,它们的优先级与结合性不会改变; 10.下面对结构或类中成员的访问中,不正确的访问是参考答案为:AA.; 其中pointer为指向类对象的指针B.pointer->salary;C.x=; 其中worker为具有类类型的对象D.Location &rA=A1;int x=rA.GetX; Location为已定义的类,A1为对象解析因pointer为指向类对象的指针,所以“pointer->salary”是正确的访问数据成员的形式;因worker为具有类类型的对象,所以“”也是正确的访问数据成员的形式;因Location为已定义的类,A1为对象,所以“Location &rA=A1;int x=rA.GetX;”表示以对象A1初始化对象引用rA,然后由对象引用rA调用成员函数GetX给变量x赋值,这样的访问成员函数的形式也是正确的;“;”中,因为运算符‘.’的优先级高于运算符‘’的优先级,所以相当于“;”,那正确的形式应该是“pointer→salary;”;故“”是不正确的访问;11.C++ 对 C 语言作了很多改进,即从面向过程变成为面向对象的主要原因是 DA.增加了一些新的运算符B. 允许函数重载,并允许设置缺省参数C. 规定函数说明符必须用原型 D. 引进了类和对象的概念12.下列符号不能组成标识符的是 A A. 连接符 B. 下划线 C. 大小写字母 D. 数字字符13.类型修饰符 unsigned 不能修饰 D A. char B. int C. long int D. float14.在 int a=3,int p=&a ;中, p 的值是 D A. 变量 a 的地址值 B. 无意义 C. 变量 p 的地址值15.下列关于指针的操作中,错误的是 D A. 两个同类型的指针可以进行比较运算 B. 可以用一个空指针赋给某个指针 C. 一个指针可以加上两个整数之差 D. 两个同类型的指针可以相加二,填空题不写解答过程,将正确的答案写在每小题的空格内;错填或不填均无分;1.面向对象程序设计中的多态性包括静态多态性和动态多态性,前者由____________机制支持,而后者则由____________机制支持;答:函数重载、虚函数解析静态多态性又称编译时多态性,调用何函数应该在编译之前就知道了,所以必须由函数重载机制来支持;动态多态性又称运行时多态性,调用何函数只有在运行时才知道,所以由虚函数与指针或引用机制来支持;2.由cha r const str=”stucture”;所以定义的指针称为____________,关键字const 所修饰的是____________;答:指向常量的指针、指针所指的字符串解析根据由‘’在修饰符“const”中位置的不同,它所修饰的对象也不同,“const ”表示所修饰的是指针所指的常量,该指针称为指向常量的指针;“ const”表示所修饰的是指针本身,该指针称为常指针;“ const ”则表示所修饰的是指针本身和指针所指常量,该指针称为指向常量的常指针;3.引入虚基类的目的是为了解决多重继承中的____________和____________问题;答:二义性、多占用空间解析在允许多重继承时可能出现两个问题,第一个是公有派生类中的成员通过不同基类调用它们上一级公共基类的同一成员,这就产生了调用的二义性;每一个基类都为它们的上一级公共基类存有备份,这就引起了公共基类的重复存储,也就多占了存储空间;引入虚基类的目的是为了解决多重继承中的这两个问题;4.构造函数与析构函数所调用的虚函数是____________的函数,因此调用时实现的是____________联编;答:所在类、静态解析在生成派生类的对象时,先调用基类的构造函数生成基类对象,再调用派生类的构造函数来生成派生类对象;所以当在构造函数中调用虚函数时,当调用基类的构造函数时,此时派生类还未生成,所以它只能调用自己的虚函数;调用派生类构造函数时,它也只能调用自己的虚函数,因为虚函数的调用是不能由派生类调用基类的;在析构派生类对象是时,先调用派生类的析构函数析构掉派生类对象,再调用基类的析构函数来析够掉基类的对象;所以当在析够构函数中调用虚函数时,派生类的析构函数调用的是它自己的虚函数原因同构造函数,基类的析构函数调用的也是它自己的虚函数,因为此时派生类对象以已被析构掉了;由上可见,当构造函数与析够函数调用虚函数时,它们调用的都是自己类的函数,因此调用时实现的是静态联编;7.说明一个const成员函数又称常量成员函数的方法是,将const写在__________之间,而且它修饰的是__________;答:函数头与函数体、this指针解析为了说明一个常量成员函数的方法是,将const写在函数头的右圆括号‘’与函数体的左花括号‘{’之间,而且它修饰的是对象所属的this指针;表示该函数不能修改它所在对象中的数据成员的值; 20.对某个运算符的重载,实际上是用关键字____________与该运算符组成一个运算符函数,而且该运算符函数的返回类型不能是____________的;答:operater、void解析对某个运算符的重载,实际上是用关键字operater 与该运算符组成一个运算符函数,而且该运算符函数的返回类型不能是无类型的,即不能是void的;三改错题1.分析下列程序中的错误,并说明出错原因;includeclass base {const int n;public:base { cout<<”Initializing default\n”; }baseint m { cout<<”Initializing\n”; n=m; }~base { cout<<”Destroying\n”; }};void main{ base x1;base y=x;}答:1 n=m; const数据成员不以该形式赋值2错误处base y=x;,以对象初始化对象解析1作为const数据成员n不能用赋值表达式的形式为其赋初值,必须在定义构造函数时在函数头中以“baseint m:nm”形式来初始化;2base y=x; 语句中‘=’不是赋值的意思,而是初始化的意思;即在定义类base的对象y时,以对象x给它初始化,相当于base yx;;但是以对象初始化对象时,必须调用拷贝构造函数才行;因程序中没给出拷贝构造函数,也不能调用系统的缺省拷贝构造函数,因用户给出了构造函数后,再也不能调用系统提供的任何缺省构造函数;所以,base y=x;是错误的;2.分析下列程序中的错误,并说明出错原因;includeclass A {int x;public:Aint a { x=a; fun; }virtual void fun=0;};class B:public A {public:Bint b :Ab {}void fun { }};void main{ A aa5;B bb8;}答:1A aa5; 抽象类不能定义对象解析1在构造函数“Aint a”调用了纯虚函数“fun”,因构造函数调用虚函数是静态联编,即调用的是它自己类的虚函数;在此调用的是纯虚函数,它只被说明,而未定义,所以不可能被执行,因此出错;2抽象类相当于是对类的引用性声明,所以它只能定义该类的指针和引用,而不能定义它的对象;在此,A 为抽象类,而“A aa5”却定义了A的对象,因此是错误的;3.分析下列程序中的错误,并说明出错原因;includeclass AA {int aa;AAint xx { aa=xx; }public:int get { return aa; }~AA { cout<<”Destroying”<<AA<< endl;};main{ AA elem5;cout<<<<endl;}答:1AAint xx 的访问属性错、应具有公有属性解析1构造函数虽是由系统自动调用来生成对象的,但一般都是在类外调用,所以它的访问属性必须是公有的;程序中构造函数的访问属性是私有的缺省值,运行中必定出错;四.完成程序题本大题共5小题,每小题4分,共20分根据题目要求,完成程序填空;1.仔细阅读下列求两个点之间距离的程序,根据程序的输出结果在划线处填入正确语句;class point {float x,y;public:pointfloat a,float b { x=a; y=b; }float distancepoint &p {float dx=_____①______;float dy=_____②______;return floatsqrtdxdx+dydy;}};void main{ point p12,3,p232,43;cout<<③___<<endl;}答:①②③distancep2解析由于求两点之间距离的函数“distance”为成员函数,所以由该函数的this指针所指对象可用作起点参数之一,另一个用作终点的参数,必须在函数的参数表中显式地给出;dx 和dy分别计算两个结点间x和y坐标间的距离,因此应该为:dx= – x 和 dy = – y;对它们求平方相加后开方即可,得到两点间的距离:floatsrrtdada+dydy;在主程序中求p1和p2两个结点之间的距离,由于由p1调用距离函数,所以由p2作为它的参数,即distancep2;2.两个复数只有当它们的实部和虚部分别相等时,才被认为它们相等;在空格处填入合适的内容,以完成下面的程序,使其重载运算符“==”,用以比较两个复数的相等;请在主函数中输出比较的结果;includeclass complex {double real,imag;public:complexdouble r,double i { real=r; imag=i; }bool operator==complex &;};int complex:: operator==complex &com{ return_____①_____ }void main{ complex c1,,c2,;if______②______return cout<<”true\n”;elsereturn cout<<”false\n”;}答:① real==&&imag==② c1==c2或==c2解析若两个复数的相等,则必有它们的实数部分和虚数部分都相等,所以运算符重载函数中返回“real==&&imag==”,只有real==与imag==都为真时,该函数的返回值才为真;在主程序中,为了比较两个复数c1和c2,可以隐式地写成“c1==c2”,也可显式写成“==c2”;3.下列程序中声明了两个类AA和BB,其中函数“print”是类AA的成员函数,但是类BB的友元函数;请在①、②和③处各填入正确的内容,使程序能正常运行;include_____①______;class AA {int t;public:AAint x { t=x; }void printBB &b;};class BB {int s;public:BBint y { s=y; }friend v oid ___②___printBB &;};void ____③_____{ cout<<”AA:”<<T<<”;BB:”<<<<endl;}void main{ AA m6;BB n8;n;}答:① class BB;② AA::③ AA::printBB &w解析由于AA类的成员函数“print”是类BB的友元函数,因此它必须有一个BB类的引用作为参数,以便有引用BB类数据成员的接口;但此时BB类还未定义,为解决此矛盾,在①处先对BB类作引用性声明“class BB;”,告诉系统BB类在后面定义;因为函数“print”是类AA的成员函数,在类外定义必须加上类名和作用域分辨符,即在②处加上“AA::”;在BB类外定义“print”时,因是友元,所以没有加上“BB::”的必要,但“AA::”还是必须加的,所以在③处填“AA::printBB &w”;五.程序分析题1.请分析以下的程序,给出该程序的正确执行结果;include<iostream>using namespace std;int addint x,int y Array {return x+y; }void main{int m=2,n=3;cout<<"1:"<<addm++,m+n<<endl;m=2,n=3;cout<<"2:"<<add++m,m+n<<endl;m=2,n=3;cout<<"3:"<<addm+n,m++<<endl;m=2,n=3;cout<<"4:"<<addm+n,++m<<endl;}答:1:72:83:84:9解析在说明答案之前,要说明两个问题:1C++语言中,函数参数是压在栈里的,因压栈是从前往后进行的,所以出栈就是从后向前进行的,也即先取最后的参数,然后再向前逐个取用;2对于单加运算,m++是先执行后加1,++m是加1后再执行;由此,因m=2,n=3;,所以:1:m+++m+n=2+2+3=7 m++后执行,且后加1,所以m=2一直未变2:++m+m+n=3+2+3=8 ++m后执行,但先加1,执行++m时,m=3了3:m+n+m++=3+3+2=8 先执行m++,后加1,执行m+n时,m=3了4:m+n+++m=3+3+3=9; 先执行++m,且先加1,故一开始就有m=33.请分析下面的程序并给出该程序的执行结果;includeclass AA {int a;public:AA { cout<<”In itualizing AA\n”; }~AA { cout<<”Destroying AA\n”;};class BB {int b;AA p;public:BB { cout<<”Initualizing BB\n”; }~BB { cout<<”Destroying BB\n”;};void main{ BB X;cout<<”Ending main\n”;}答:Initualizing AAInitualizing BBEnding mainDestroying BBDestroying AA解析虽然在主程序中只定义了一个类BB的对象,但在类BB中声明了类AA的对象作为它的数据成员;当一个类中含有对象作为数据成员时,在生成对象时,先调用成员对象的构造函数,再调用类自己的构造函数,所以输出了“Initualizing AA”成员对象构造函数的输出和“Initualizing BB”类自己构造函数的输出;对象生成后,执行下一句输出语句,则输出“Ending main”;此时程序结束,调用析构函数来析构掉对象,先调用类自身的析构函数,其输出为“Destroying BB”,再调用成员对象的析构函数,其输出为“Destroying AA”;4.写出下列程序的运行结果;includeclass AA {public:static int n;AA { n++; }};int AA::n=0;main{ cout<<”AA::n=”<<AA::n<<endl;AA d1;cout<<<<<endl;AA d2;cout<<<<<endl;AA d3,d4;cout<<<<<endl;cout<<<<<endl;}答:AA::n=0=1=2=4=4解析由于数据成员n的访问属性是公有的,所以在类外可访问它;又它是静态变量,所以具有全局性;在构造函数中,执行的是n++操作,即每次调用构造函数n就加1;当程序开始时,因未定义对象,所以n的值为初始化时的值,则输出为“AA::n=0”;当定义了对象d1后,由于调用了构造函数,则该对象中n=1,故输出“=1”;同理,对象d2输出“=2”;由于接下来生成了两个对象d3和d4,调用两次构造函数,n两次加1,此时n=4,所以下面两条语句的输出为“=4”和“=4”;5.写出下列程序的输出结果;includeclass AA {public:AA{} { cout<<”Constructor of AA. \n”; fun; }virtual void fun { cout<<”AA::fun calle d.\n”; }};class BB:public AA {public:BB{ cout<<”Constructor of BB.\n”; fun; }void fun { cout<<”BB::fun calle d.\n”; }};void main{ BB d; }答:Constructor of AA.AA::fun called.Constructor of BB.BB::fun called.解析虽然函数fun说明为虚函数,但当在构造函数中被调用时,呈现的是静态联编,即基类和派生类都调用各自的函数fun;所以,当生成对象d时,先调用基类的构造函数,在构造函数中又调用自己的函数“fun”,所以输出为“Constructor of AA.”和“AA::fun called.”;同理调用派生类的构造函数时,生成的输出为“Constructor of BB.”和“BB::fun called.”;6.请给出下面的程序的输出结果;includetemplate class Tvoid sortT a,int n{ T num;forint i=0;i<n-1;i++{ forint j=i;j<n-1;j++ifaj>aj+1{ num=aj; aj=aj+1; aj+1=num; }}fori=0;i<n;i++cout<<ai<<endl;}void main{ int iver5={ 12,45,9,23,37 };double dver5= { ,,,, };sortiver,5;sortdver,.5;}答:9 12 23 37 45解析这是使用模板的例子;函数sort是一个递增的排序函数,T是个模板;当数组是整型数据类型时,它为整型数组排序;当数组为双精度数据类型时,它为双精度数组排序;所以输出如上结果;7.分析以下程序的执行结果 include<>void main{int a;int &b=a; fp;fp=&Sample::gety;int t=s.fp;cout<<"v="<<v<<",t="<<t<<endl;}解:本题说明了类成员函数指针的使用方法;在main中定义的fp是一个指向Sample类成员函数的指针;执行fp=Sample::getx后;fp指向成员函数getx,int v=s.fp语句等价于int ,v=x=2;执行fp=Sample::gety之后,fp指向成员函数gety,int t=s.fp语句等价于int t=,t=x=7;所以输出为:v=2,t=711.分析以下程序的执行结果include<>class Sample{int x;int y;public:Sampleint a,int b{x=a;y=b;}int getx{return x;}int gety{return y;}};void main{int Sample::fp;fp=&Sample::getx;Sample s2,7,p=&s;int v=p->fp;fp=&Sample::gety;int t=p->fp;cout<<"v="<<v<<",t="<<t<<endl;}解:本题说明了类成员函数指针的使用方法;这里通过指向对象的指针来调用指向类成员函数的指针,其原理与上题相似;输出仍为:v=2,t=712.分析以下程序的执行结果include<>class base{public:base{cout<<"constructing base class"<<endl;}~base{cout<<"destructing base class"<<endl; }};class subs:public base{public:subs{cout<<"constructing sub class"<<endl;}~subs{cout<<"destructing sub class"<<endl;}};void main{subs s;}解:本题说明单继承情况下构造函数和析构函数的调用顺序;这里base为基类,subs为派生类;所以输出为:constructing base classconstructing sub classdestructing sub classdestrcuting base class注意:在单继承情况下,首先调用基类的构造函数 ,随后调用派生类的构造函数,析构函数的调用顺序则正好相反;13.分析以下程序的执行结果:include<>class base{int n;public:baseint a{cout<<"constructing base class"<<endl;n=a;cout<<"n="<<n<<endl;}~base{cout<<"destructing base class"<<endl;}};class subs:public base{base bobj;int m;public:subsint a,int b,int c:basea,bobjc{cout<<"constructing sub cass"<<endl;m=b;cout<<"m="<<m<<endl;}~subs{cout<<"destructing sub class"<<endl;}};void main{subs s1,2,3;}解:本题说明派生类中含有对象成员情况下构造函数和析构函数的调用顺序;这里base为基类,subs 为派生类,subs类的构造函数中含有对象成员;所以输出为:constrcuting base classn=1constructing base classn=3constructing sub classm=2destructing sub classdestructing base classdestructing base class注意:当派生类中含有对象成员时,构造函数的调用顺序如下:基类的构造函数2对象成员的构造函数3派生类的构造函数析构函数的调用顺序与之相反14.分析以下程序的执行结果include<>class A{public:int n;};class B:public A{};class C:public A{};class D:public B,public C{int getn{return B::n;}};void main{D d;::n=10;::n=20;cout<<::n<<","<<::n<<endl;}解: D类是从类和类派生的而类和类又都是从类派生的,但各有自己的副本;所以对于对象d,::n与::n 是两个不同的数据成员它们互无联系;所以输出为:10,2015.分析以下程序的执行结果include<>class A{public:int n;};class B:virtual public A{};class C:virtual public A{};class D:public B,public C{int getn{return B::n;}};void main{D d;::n=10;::n=20;cout<<::n<<","<<::n<<endl;}解:D类是从类和类派生的而类和类又都是从类派生,但这是虚继承关系即是虚基类因此和共用一个的副本所以对于对象d,::n与::n是一个成员;所以输出为:20,2016.分析以下程序执行结果include<>int addint x,int y{return x+y;}double adddouble x,double y{return x+y;}void main{int a=4,b=6;double c=,d=;cout<<adda,b<<","<<addc,d<<endl;解:本题说明函数重载的使用方法, 这里有两个add函数,一个add函数的参数与返回值为int型,另一个的参数与返回值为double型,它们是根据参数类型自动区分的;所以输出为: 10,1017.分析以下程序的执行结果include<>class Sample{int i;double d;public:void setdataint n{i=n;}void setdatadouble x{d=x;}void disp{cout<<"i="<<i<<",d="<<d<<endl;}};void main{Sample s;10;;;}解:本题说明重载成员函数的使用方法;setdata成员函数有两个,根据其参数类型加以区分;所以输出为:i=10, d=22.分析以下程序的执行结果include<>class Sample{int n;public:Sample{}Sampleint i{n=i;}Sample &operator =Sample;void disp{cout<<"n="<<n<<endl;}};Sample &Sample::operator=Sample s{Sample::n=;return this;}void mainSample s110,s2;s2=s1;;}解:本题说明重载运算符=的使用方法;operator=成员函数实现两个对象的赋值;所以输出为: n=10六.程序设计题1.设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,以实现求两个三角形对象的面积之和;解:在Triangle类中设计一个友元函数operator+Triangle t1,Triangle t2,它重载运算符"+",返回t1和t2两个三角形的面积之和;本题程序如下:include<>include<>class Triangle{int x,y,z;double area;public:Triangleint i,int j,int k{double s;x=i;y=j;z=k;s=x+y+z/;area=sqrtss-xs-ys-z;}void disparea{cout<<"Area="<<area<<endl;}friend double operator+Triangle t1,Triangle t2{return +;}};void main{Triangle t13,4,5,t24,5,6;double s;cout<<"t1:"; ;cout<<"t2:"; ;s=t1+t2;cout<<"总面积="<<s<<endl;本程序执行结果如下:t1:Area=6t2:Area=总面积=2.重载运算符“+”友元函数只能返回两个三角形的面积之和,不能计算三个三角形的面积之和,改进一下,使之能计算任意多个三角形的面积之和;解:重载运算符为什么不能计算3个三角形的面积之和呢对于式子:s=t1+t2+t3,先计算t1+t2,返回一个double数然后再进行该double数+t3的计算,显然没有这样的重载运算符“+”友元函数,只需要添加这样重载运算符“+”友元函数即可;本题程序如下:include<>include<>class Triangle{int x,y,z;double area;public:Triangleint i,int j,int k{double s;x=i;y=j;z=k;s=x+y+z/;area=sqrtss-xs-ys-z;}void disparea {cout<<"Area="<<area<<endl;}friend double operator+Triangle t1,Triangle t2{return +;}friend double operator+double d,Triangle t{return d+;}};void main{Triangle t13,4,5,t24,5,6,t35,6,7,t46,7,8;double s;cout<<"t1:"; ;cout<<"t2:"; ;cout<<"t3:"; ;cout<<"t4:"; ;s=t1+t2+t3+t4;cout<<"总面积="<<s<<endl; }本程序的执行结果如下:t1:Area=6t2:Area=t3:Area=t4:Area=总面积=3.设计一个学生类student,包括姓名和三门课程成绩,利用重载运算符”+“将所有学生的成绩相加放在一个对象中,再对该对象求各门课程的平均分; 解:include<>include<>include<>class student{char name10;int deg1,deg2,deg3;public:student{}studentchar na,int d1,int d2,int d3{strcpyname,na;deg1=d1;deg2=d2;deg3=d3;}friend student operator+student s1,student s2{static student st;=+;=+;=+;return st;}void disp{cout<<setw10<<name<<setw5<<deg1<<setw5<<deg2<<setw5<<deg3<<endl;}friend void avgstudent &s,int n{cout<<setw10<<"平均分"<<setw5<<n<<setw5<<n<<setw5<<n<<endl;}};void main{student s1"Li",77,82,85,s2"Zheng",75,62,89;student s3"Ma",89,87,95,s4"Xu",55,79,65,s;out<<"输出结果"<<endl;;;s=s1+s2;avgs,2;;;s=s3+s4;avgs,2;}运行结果:输出结果li 77 82 85zheng 75 62 89平均分 76 72 87Ma 89 87 95Xu 55 79 65平均分 72 83 804.计算e的值;e是自然对数的底,它和π一样是数学中最常用的无理数常量;其近似值的计算公式为:e=1+1/1+1/2+1/3+...+1/n-1+r当n充分大时,这个公式可以计算任意精度e的近似值;为了保证误差r<ε,只需1/n-1 > r <ε程序代码如下:// programinclude<>void main{const double eps=;int n=1;float e=,r=;do // 开始do循环;循环条件由后面的while中的表达式值确定;{e+=r;n++;r/=n;}whiler>eps;cout<<"The approximate Value of natural logarithm base is: ";cout<<e<<endl;}5.16.设计一个立方体类Box,它能计算并输出立方体的体积和表面积;解: Box类包含三个私有数据成员a立方体边长、volume体积和area表面积,另有两个构造函数以及seta设置立方体边长、getvolume计算体积、getarea计算表面积和disp输出结果;。
面向对象程序设计复习题(附参考答案)
【题目】【题型:单选题】【难度:中】【考核能力:理解】【漏选得分:是】【自动判分:是】【应用类别:终考】【特殊标签:】机器语言中的指令编码为()编码。
[A.]二进制[B.1符号[c.1十进制[D.]数字【答案】A【知识点】01106.1.1.1【解析】无【题目】【题型:单选题】【难度:中】【考核能力:理解】【漏选得分:是】【自动判分:是】【应用类别:终考】【特殊标签:】JaVa语言的主要特点不包括()。
[A.]面向对象[B.]自动垃圾回收[CJ处理文件[D.]可移植性【答案】C【知识点】01106.1.1.1【解析】无【题目】【题型:单选题】【难度:中】【考核能力:理解】【漏选得分:是】【自动判分:是】【应用类别:终考】【特殊标签:】Java开发工具包简称为()。
[A.]JKD[B.]JRK[C.]JDK[D.]JRE【答案】C【知识点】01106.1.1.1【解析】无【题目】【题型:单选题】【难度:中】【考核能力:理解】【漏选得分:是】【自动判分:是】【应用类别:终考】【特殊标签:】具有相同属性和服务的一组对象的模板称为()。
1B.]类[c.1代码[D.]概念【答案】B【知识点】01106.1.1.1【解析】无【题目】【题型:单选题】【难度:中】【考核能力:理解】【漏选得分:是】【自动判分:是】【应用类别:终考】【特殊标签:】类是对具有共同属性和行为的对象的抽象描述,每个对象称为该类的一个()。
[A.]产品[B.1元素[c1成分[D.]实例【答案】D【知识点】01106.1.1.1【解析】无【题目】【题型:单选题】【难度:中】【考核能力:理解】【漏选得分:是】【自动判分:是】【应用类别:终考】【特殊标签:】Java是一门()语言。
[A.]机器[B.]汇编[C.)面向过程的高级[D.]面向对象的高级【答案】D【知识点】01106.1.1.1【解析】无【题目】【题型:单选题】【难度:中】【考核能力:理解】【漏选得分:是】【自动判分:是】【应用类别:终考】【特殊标签:】使用JDK编译JaVa程序时使用的命令是()。
10月全国自考面向对象程序设计试题及答案解析
全国2018年10月高等教育自学考试面向对象程序设计试题课程代码:02328一、单项选择题(本大题共12小题,每小题2分,共24分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1. 所谓多态性是指( )A. 不同的对象调用不同名称的函数B. 不同的对象调用相同名称的函数C. 一个对象调用不同名称的函数D. 一个对象调用不同名称的对象2. 有如下程序段:int *p,a[6]={-1,0,1,2,3,4}; p=a+3;执行该程序段后,*p的值为( )A. 4B. 2C. 1D. NULL3.类MyA的拷贝初始化构造函数是( )A. MyA()B. MyA(MyA*)C. MyA(MyA&)D. MyA(MyA)4.一个函数功能不太复杂,但要求被频繁调用,则应把它定义为( )A. 内联函数B. 重载函数C. 递归函数D. 嵌套函数5.以下有关继承的叙述正确的是( )A. 构造函数和析构函数都能被继承B. 派生类是基类的组合C. 派生类对象除了能访问自己的成员以外,不能访问基类中的所有成员D. 基类的公有成员一定能被派生类的对象访问6. 解决二义性问题的方法有( )A. 只能使用作用域分辨操作符B. 使用作用域分辨操作符或赋值兼容规则C. 使用作用域分辨操作符或虚基类D. 使用虚基类或赋值兼容规则7. 假设类X以类Y作为它的一个基类,并且X类的名字func()支配Y类的名字func(),obj 为类X的对象,则obj.func()语句实现的功能为( )A. 先执行类X的func(),再执行访问类Y的func()B. 先执行类Y的func(),再执行访问类X的func()C. 执行类X的func()D. 执行类Y的func()18.以下叙述正确的是( )A. 构造函数调用虚函数采用动态联编B. 构造函数可以说明为虚函数C. 当基类的析构函数是虚函数时,它的派生类的析构函数也是虚函数D. 析构函数调用虚函数采用动态联编9.以下关于抽象类的描述正确的是( )A. 不能说明指向抽象类对象的指针或引用B. 可以说明抽象类对象C. 抽象类的纯虚函数的实现可以由自身给出,也可以由派生类给出D. 抽象类的纯虚函数的实现由派生类给出10.在下面格式化命令的解释中,错误的...是( )A. ios::skipws 跳过输入中的空白字符B. ios::fill() 获得当前的填充字符C. ios::hex 转换基数为八进制形式D. ios::precision 返回当前的精度11.下面运算符中,不能被重载的运算符是( )A. <=B. -C. ?:D. []12.下列有关模板和继承的叙述正确的是( )A. 模板和继承都可以派生出一个类系B. 从类系的成员看,模板类系的成员比继承类系的成员较为稳定C. 从动态性能看,继承类系比模板类系具有更多的动态特性D. 相同类模板的不同实例一般没有联系,而派生类各种类之间有兄弟父子等关系二、填空题(本大题共8小题,每小题2分,共16分)请在每小题的空格中填上正确答案。
面向对象程序设计-试卷[附参考答案]
《面向对象程序设计》试卷第一学期“本科”期末考试计算机专业面向对象程序设计试题一、单项选择题(每小题1分,共20分)1.由C++源程序文件编译而成的目标文件的默认扩展名为(C)。
A.cppB.exeC.objD.lik2.设x和y均为bool量,则x&&y为真的条件是(A)。
A. 它们均为真B.其中一个为真C. 它们均为假D. 其中一个为假3.在下面的二维数组定义中,正确的语句是(C)。
A.int a[5][];B.int a[][5];C.int a[][3]={{1,3,5},{2}};D.int a[][10];4.在文件包含命令中,被包含文件的扩展名(C)。
A.必须是 .h;B.不能是 .h;C.可以是 .h或 .cpp;D.必须是 .cpp;5.要使语句“p=new int[10][20]”正确,p应事先定义为(D)。
A.int *p;B.int **p;C.int *p[20];D.int (*p)[20];6.在关键字public后定义的成员为该类的(B)成员。
A.私有B. 公有C.保护D.任何7.假定AA为一个类,a为该类私有的数据成员,若要在该类的一个成员函数中访问它,则书写格式最好为(B)。
A.aB.AA::aC.a( )D. AA::a( )8.队列具有(A)的操作特性。
A.先进先出B.先进后出C.进出无序D.仅进不出9.假定AB为一个类,则执行“AB a,b(3),*p”语句时共调用该类构造函数的次数为(D)。
A. 5B. 4C. 3D. 210.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是(B)。
A. 作为友元函数重载的1元运算符B. 作为成员函数重载的1元运算符C. 作为友元函数重载的2元运算符D. 作为成员函数重载的2元运算符二、填空题(每空2分,共20分)1.当执行cout语句输出endl数据项时,将使C++显示输出屏幕上的光标从当前位置移动到下一行的开始位置。
面向对象程序设计》期末试卷及标准答案
《面向对象程序设计C++》期末考试试卷(A)班级:姓名:学号:分数:试卷说明:本套试题共四个大题,全部题目都答在答题纸上,写在其他地方均无效。
(答题纸在本套试卷的第10页上)一、选择题(每小题2分,共40分)1、C++是(C )。
A. 面向对象的程序设计语言B. 面向过程的程序设计语言C. 既支持面向对象的程序设计又支持面向过程的程序设计的混合型语言D. 非结构化的程序设计语言2、面向对象程序设计思想的主要特征中不包括( D )。
A. 封装性B. 多态性C. 继承性D. 功能分解,逐步求精3、若定义:string str; 当语句cin>>str; 执行时,从键盘输入:Microsoft Visual Studio 6.0!所得的结果是str=( B )。
A. Microsoft Visual Studio 6.0!B. MicrosoftC. Microsoft VisualD. Microsoft Visual Studio 6.04、考虑下面的函数原型声明:void testDefaulParam(int a,int b=7,char z='*'); 下面函数调用中,不合法的是( C )。
A. testDefaulParam(5);B. testDefaulParam(5,8);C. testDefaulParam(5,'#');D. testDefaulParam(0,0,'*');5、下列语句中,将函数int sum(int x, int y)正确重载的是( C )。
A. float sum(int x, int y);B. int sum(int a, int b);C. float sum(float x, float y);D. double sum(int y, int x);6、下列表示引用的方法中,( A )是正确的。
00410月《面向对象程序设计》试题-及答案
全国2004年10月试题及答案面向对象程序设计试题课程代码:02328一、单选1、程序设计中,首先在问题域中识别出若干个()A.函数B.类C.文件D.过程2、定义类模板用关键字()A.constB.newC.deleteD.template3、运算结果类型相同的()A. 9.0/2.0 9.0/2B. 9/2.0 9/2C. 9.0/2 9/2D. 9/2 9.0/2.04、已知f1 f2同一类两个成员函数,但f1不能调用f2,说明()a.f1 f2都是静态函数b.f1是静态,f2不是c.f1不是,f2是静态d.f1 f2都不是静态函数5、调用一成员函数时,使用动态联编的情况是()A.通过对象调用一虚函数B.通过指针或引用调用一虚函数C.通过对象调用静态函数D.通过指针或引用调用一静态函数6、假定一个类构造函数为:“A(int aa=1,int bb=0){a=aa;b=bb;}则执行"A x(4)"后,x.a和x.b值分别是:()A.1,0B.1,4C.4,0D.4,17、在派生类中能直接访问基类的()A.公有成员,私有成员B.保护成员,私有成员C.不可访问成员,私有成员D.公有成员,保护成员8、不具访问权限属性的是:( )A.非类成员B.类成员C.数据成员D.函数成员9、类定义中private,protected,public 出现次数为()A.任意多次B.至多一次C.public 至少一次D.至少一次10、C++鼓励程序员将()A.数据操作分别封装B.不同类型数据封装C.数据操作封装在一起D.不同作用操作封装在一起答案:B D A B B C D A A C二、填空1、C++中,最好用()代替malloc2、函数模板中template之后尖括号的类型参数冠以保留字()3、在IOS类中定义的用于格式控制的枚举变量中十、八、十六进制是dec,oct,( )4、如果重载了运算符+,则相应运算函数名是()5、由static修饰的数据成员为该类的所有对象()6、为了实现多态性,派生类需要重新定义基类中的()7、编译时多态性通过()函数实现。
面向对象程序设计试卷及答案
考试试卷A(答案)面向对象程序设计注意事项:1. 请考生按要求在试卷装订线内填写姓名、学号和年级专业。
2. 请仔细阅读各种题目的回答要求,在规定的位置填写答案。
3. 不要在试卷上乱写乱画,不要在装订线内填写无关的内容。
4. 满分100分,考试时间为120分钟。
题号一二三四五总分统分人得分一.单项选择(本大题共10小题,每小题3分,共30分)1. C#中每个int 类型的变量占用( B )个字节的内存。
(A )8 (B )4 (C )2 (D )12. 面向对象的特点是( A )得分评分人(A)封装、继承、多态(B)抽象、封装、多态(C)抽象、继承、封装(D)抽象、多态、重载3. C#控制台程序的主入口点是( C )(A)Page_Load函数(B)Run函数(C)Main函数(D)Form_Load函数4. 引用类型存储在( B )中。
(A)堆栈(B)堆内存(C)队列(D)列表5. 在C#中,表示一个字符串的变量应使用以下哪条语句定义( B )(A)CString str (B)string str(C)Dim str as string (D)char *str6.在中,用来与数据源建立连接的对象是( A )。
(A)Connection对象(B)Command对象(C)DataAdapter对象(D)DataSet对象7. 在类的定义中,类的( B )描述了该类的对象的行为特征。
(A)类名(B)方法(C)所属的名字空间(D)私有域8. 如果未显式赋值,则将整型值( B )赋给枚举中的第一个元素。
(A)1 (B)0 (C)2 (D)39. float类型的值可以隐式转换成( C )类型的值而保持值不被改变。
(A)char (B)long (C)double (D)int10.在C#中,假设Class1是一个类,而IExample是一个接口,下面的( A )类声明是正确的。
(A)class Employee: Class1, IExample(B)class Employee: IExample, Class1(C)class Employee- Class1, IExample(D)class Employee: Class1/IExample二.判断题(本大题共5小题,每小题3分,共15分) 1. C#中子类可以继承多个基类,也可以继承一个接口。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
全国2007年10月高等教育自学考试面向对象程序设计试题课程代码:02328一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1.以下说法中正确的是( )A.C++程序总是从第一个定义的函数开始执行B.C++程序总是从main函数开始执行C.C++函数必须有返回值,否则不能使用函数D.C++程序中有调用关系的所有函数必须放在同一个程序文件中2.以下关于函数模板叙述正确的是( )A.函数模板也是一个具体类型的函数B.函数模板的类型参数与函数的参数是同一个概念C.通过使用不同的类型参数,函数模板可以生成不同类型的函数D.用函数模板定义的函数没有类型3.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是( )A.作为友元函数重载的1元运算符B.作为成员函数重载的1元运算符C.作为友元函数重载的2元运算符D.作为成员函数重载的2元运算符4.构造函数不具备的特征是( )A.构造函数的函数名与类名相同B.构造函数可以重载C.构造函数可以设置默认参数D.构造函数必须指定类型说明5.在C++中,封装是借助什么达到的( )A.结构B.数组C.类D.函数6.在哪种情况下适宜采用inline 定义内联函数?( )A.函数体含有循环语句B.函数体含有递归语句C.函数代码少、频繁调用D.函数代码多、不常调用7.在关键字public后面定义的成员为类的( )A.私有成员B.公用成员C.保护成员D.任何成员8. 以下哪个基类中的成员函数表示纯虚函数?( )A.virtual void tt()=0B.void tt(int) = 0C.virtual void tt(int)D.virtual void tt(int){}9.假定AA是一个类,“AA * abc( ) const;”是该类中一个成员函数的原型,若该函数返回this值,当用x.abc()调用该成员函数后,x的值( )A.已经被改变B.可能被改变C.不变D.受到函数调用的影响10.C++ 对C 语言作了很多改进,即从面向过程变成为面向对象的主要原因是( )A.增加了一些新的运算符B.允许函数重载,并允许设置缺省参数C.规定函数说明符必须用原型D.引进了类和对象的概念二、填空题(本大题共10小题,每小题2分,共20分)请在每小题的空格中填上正确答案。
错填、不填均无分。
11.如果一个派生类只有一个唯一的基类,则这样的继承关系称为____________。
12.C++支持两种多态性:____________时的多态性和运行时的多态性。
13.若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以____________的方式直接继承它。
14.所有模板都以template关键字和一个____________表开头。
15.若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的____________语句。
16.类型转换函数没有返回值类型,而且参数表为____________。
17.C++提供的预处理命令有嵌入指令,条件编译指令和____________。
18.对象将其大部分实现细节隐藏起来,这种机制称为____________。
19.定义类动态对象数组时,其元素只能靠自动调用该类的____________来进行初始化。
20.在函数体之前加____________关键字可以防止覆盖函数改变数据成员的值。
三、改错题(本大题共2小题,每小题6分,共12分)21.下面是分数类fract的定义及测试主程序,在类定义及其友元函数定义中1到6行中有三处错误,更正错误后程序应显示41/28,请指出错误所在行的行号并给出改正意见。
class fract{int den; //分子int num; //分母public //1行fract(int d=0,int n=1):den(d),num(n){ } //2行friend fract &operator+=(fract,fract&); //3行void show( ){ cout<<den<<’/’<<num;} //4行}; //5行friend fract &operator+=(fract f1,fract f 2) //6行{ //7行f1.den=f1.den*f 2.num+f1.num*f 2.den; //8行f1.num*=f 2.num; //9行return f1; //10行}void main( ){fract fr(3,4);fr+=fract(5,7);fr.show( );}错误行的行号为____________、____________和____________。
分别改正为____________、____________和____________。
22.下面程序段第13-17行中存在着三条语句错误,请指出错误语句的行号并说明原因。
class A { //1行int a; //2行public: //3行A(int aa=0):a(aa){ } //4行}; //5行class B { //6行int a,b; //7行const int c; //8行A d; //9行public: //10行B( ):c(0) {a=b=0;} //11行B(int aa, int bb):d(aa+bb) { //12行a=aa; b=bb; c=aa-bb; //13行} //14行} //15行B a , b( 1 , 2 ); //16行B x= a , y( b ) , z( 1 , 2 , 3 ); //17行错误行的行号为____________、____________和____________。
错误原因分别为____________、____________和____________。
四、程序填空题(本大题共3小题,每小题6分,共18分)请按提示要求完成以下程序段的填空。
23.在下面一段类定义中,Derived类是由直接基类Base 1和Base 2所派生的,Derived类包含有两个间接基类BaseBase,在初始化函数Init中,需要把x1和x2的值分别赋给属于基类Base1的x 成员和属于基类Base2的x成员。
class BaseBase {protected:int x;public:BaseBase( ){ x = 1;}};class Base1: public BaseBase {public:Base1( ){ }};class Base2: public BaseBase {public:Base2 ( ){ }};class Derived: ____________(1)____________{public:Derived( ) { }void Init(int x1, int x2) {____________(2)____________;____________(3)____________;}void output( ) {cout<<Base1::x<<’’<<Base2::x<<endl;}};(1) (2) (3)24.#include<iostream.h>#include<stdliB.h>class A {int *a; int n; int MaxLen;public:A(): a(0), n(0), MaxLen(0) { }A(int *aa, int nn, int MM) {n=nn;MaxLen=MM;if(n>MaxLen) exit(1);a=new int[MaxLen];____________(4)____________; //以i为循环变量把aa数组中每个元素值//传送给a数组的对应元素中}~A( );int GetValue(int i) {return a[i];} //函数体返回a[i]的值};____________(5)____________//析构函数的类外定义void main( ){int b[10]={1,2,3,4,5,6,7,8,9,10};A r(b,10,10);int i,s=0;____________(6)____________ ; //以i为循环变量,把r对象的a数据成员中的//每个元素值依次累加到s中cout<<"s="<<s<<endl;}(4) (5) (6)25.下面是一维数组类ARRAY的定义,ARRAY与普通一维数组区别是:(1)用()而不是[]进行下标访问,(2)下标从1而不是从0开始,(3)要对下标是否越界进行检查。
class ARRAY{int *v; //指向存放数组数据的空间int s;//数组大小public:ARRAY(int a[], int n);~ ARRAY( ){delete []v;}int size( ){ return s;}int& operator ( )(int n);};____________(7)____________ operator()(int n){ // ()的运算符函数定义if(____________(8)____________) {cerr<<"下标越界!"; exit(1);}//exit函数的功能是退出程序运行return ____________(9)____________;}(7) (8) (9)五、程序分析题(本大题共6小题,每小题5分,共30分)阅读以下程序,写出其运行结果。
26.#include<iostream.h>class test{private:static int val;int a;public:static int func( );static void sfunc(test &r);};int test::val=10;int test::func( ){val--;return val;}void test::sfunc(test &r){r.a=15;cout<< " result3= " <<r.a;}void main( ){cout<< " resultl= " <<test::func( )<<endl;test a;cout<< " result2= " <<a.func( )<<endl;test::sfunc(a);}27.# include<iostream.h>class position{public:int x,y;void init(int initx,int inity);int getxvalue( );int getyalue( );};void position::init (int initx,int inity){x=initx;y=inity;}int position::getxvalue( ){return x;}int position::getyalue( ){return y;}void printout(position & rl){cout<<rl. getxvalue( )<< " "<<rl.getyalue()<< '\n' ; }void main( ){position a[6] ={{1,1},{2,2},{3,3},{4,4},{5,5},{6,6}};position *pa=a;a[2].init(7,8);pa->init(5,6);for (int i=0;i<5;i++)printout(*(pa++));}28.#include <iostream.h>class test{public:virtual void fun1( ){cout << "test fun1" <<endl;}virtual void fun2( ){cout << "test fun2" <<endl;}void fun3( ){cout << "test fun3" <<endl;}};class ftt:public test{public:void fun1( ){cout <<"ftt fun1"<<endl;}virtual void fun2( ){cout << "ftt fun2"<<endl;} virtual void fun3( ){cout << "ftt fun3"<<endl;} };void main( ){test *pp;ftt q;pp = &q;pp->fun1( );pp->fun2( );pp->fun3( );}29.#include <iostream.h>class complex {int real;int imag;public:complex( int r=0 , int i=0 ): real( r ),imag( i ){ }complex operator++( ){ real ++ ; return *this; } void show( ){ cout<<real << endl << imag; }};void main( ) {complex c(5,9);++c;c.show( );}30.#include<iostream.h>class A {int a;public:A(int aa=0): a(aa) {cout<<a<<endl;}~A( ) {cout<<"11"<<endl;}};void main( ) {A *p;A x[2]={ 1 , 2 };p=new A[3];delete [ ] p;}31.#include<iostream.h>class A {int *a;public:A(int x=0) : a( new int ( x ) ) { }~A( ) {delete a;}int getA( ) {return *a;}void setA(int x) {*a=x;}};void main( ) {A x1 , x2( 3 );A *p= &x2;p->setA( x2.getA( ) + 5 );x1.setA( 15 + x1.getA( ) );cout<< x1.getA( ) <<’’<< x2.getA( ) << endl; }200710易老师做的参考答案一、1.B 2.C 3.B 4.D 5.C 6.C 7.B 8.A 9.C 10.D二、11. 单继承12.编译13.virtual public 14.虚拟的类型参数15.声明16.空17.常变量18.封装19.构造函数20.const三、21 错误的行为:1 3 6分别改正为:public:friend fract &operator+=(fract &,fract&);fract & operator +=(fract &f1,fract &f2)22 错误的行为:1315 17分别改正为:B(int aa, int bb):d(aa+bb),c(aa-bb) { //12行a=aa; b=bb; //13行}; //15行B x=a,y(b),z(1,2); //17行23 public Base1,public Base2Base1::x=x1;Base2::x=x2;24 for (int i=0;i<n;i++) a[i]=aa[i];A::~A(){delete [ ] a;}for(i=0;i<10;i++) s=s+r.GetValue(i);25 int& ARRAY:: n>s s26 resultl=9resultl=8resultl=1527 5 62 27 84 45 56 628 ftt fun1ftt fun2test fun329 6930 1 2 0 0 0 11 11 11 11 11(每个数据占一行显示)31 15 811。