面向对象程序设计练习题

合集下载

面向对象程序设计作业(带答案)

面向对象程序设计作业(带答案)

人工智能学院面向对象程序设计作业Java语言基础年级专业 2019级软件工程专业学号姓名成绩一、选择题1.下列标识符中,正确的是(C)。

A.class B. 123_rr C. _lei D. test&122.下列( D )的选项可以正确表示八进制8。

A.0x8 B. 0x10 C.08 D. 0103. 以下哪个是十进制数17对应的十六进制正确表示?( D )A. 017B. x11C. 0x17D. 0X114.在Java中,不属于整数类型的是( A )。

A.double B. long C. int D. byte5.在Java中,关于标识符的说明,不正确的是(D )。

A.严格区分大小写;B.长度不限;C.不能用关键字和保留字作为标识符;D.可以包含空格6.给出下面代码的输出结果。

( D )public class ByteAdd {public static void main(String args[ ]){byte a=10;byte b=100;byte c;c=a+b;System.out.println(a+"+"+b+"="+c);} }A.输出零B.输出 10+100=110C. 编译时正确,运行时将产生错误;D.编译时将产生错误;二、程序阅读题1. 对于以下程序,运行“java Abs”,将得到什么打印结果?public class Abs{static int a=0x11;static int b=0011;static int c='\u0011';static int d=011;public static void main(String args[]){ System.out.println(a);System.out.println(b);System.out.println(c);System.out.println(d);}}179179类和对象年级专业 2019级软件工程专业学号姓名成绩一、选择题1. 为了在当前程序中使用ch4中的类,可以使用的语句是( A )。

面向对象程序设计样卷

面向对象程序设计样卷

面向对象程序设计样卷一、选择题( 本大题共10小题, 每题2分, 共20分)4.在下列定义的引用中, ( B )是错误的。

A. int i;B. int i;int &j = i; float &j=i;C. float i;D. char d;float &j = i; char &e = d;5. 假定BB为一个类,则执行BB y;语句时将自动调用该类的( B )A. 有参构造函数B. 无参构造函数C. 拷贝构造函数D. 赋值重载函数7.下列对派生类的描述中, ( C )是错误的。

A. 一个派生类能够作为另一个派生类的基类B.派生类至少应有一个基类C. 基类中成员访问权限继承到派生类中都保持不变D.派生类成员除了自己定义的成员外, 还包含了它的基类成员10.控制输出格式的控制符中, ( D )是设置输出宽度的。

A.wsB.endsC. setfill()D.setw()二、填空题( 本大题共10小题, 每题2分, 共20分)1.以/*开始, 以*/结束, 在/*和*/之间的部分即为注释。

2.重载函数在参数类型或参数个数上不同, 但函数名和类名_相同。

3. 假如一个类的名称为MyClass, 使用这个类的一个对象初始化该类的另一个对象时, 能够调用__拷贝______构造函数来完成此功能。

4.当删除对象时, 程序自动调用析构函数。

5. 对于每一个类的非静态成员函数, 都有一个隐含的_this_______指针。

8. 抽象类是指类里有一个函数, 是纯嘘函数。

三、改错题( 下面程序或程序段中有一处错误, 请用注释标明错误所在行的出错原因。

本大题共5小题, 每题2分, 共10分) 1. #include<iostream>using namespace std;int main(){ cout<<"This is a program."<<endl;return 0;}2. #include<iostream>using namespace std;int main(){x=3;int y=x*x;cout<<"y="<<y<<"\n";return 0;}3. #include<iostream>using namespace std;class Aa{public:Aa(int i=0){a=i; cout<<"Constructor "<<a<<endl; } ~Aa(){ cout<<"Destructor "<<a<<endl; }void print( ){cout<<a<<endl;}private:int a;};int main(){Aa al(1),a2(2);al.print();cout<<a2.a<<endl;return 0;}4.class A{int a,b;public:A(int aa,int bb=78){a=aa;b=bb;} };int main(){A x(2), y(4,9);return 0;}5. #include<iostream>using namespace std;class Test{public:static int x;};int Test :: x=20;int main(){cout<<Test::x;return 0;}四、程序分析题( 分析程序, 写出运行结果。

面向对象程序设计习题

面向对象程序设计习题

⾯向对象程序设计习题选择题1. 程序中主函数的名字为()。

A. mainB. MAINC. MainD. 任意标识符2. 为了提⾼程序的运⾏速度,可将不太复杂的功能⽤函数实现,此函数应选择()。

A. 内联函数B.重载函数C.递归函数D.函数模板3. 将两个字符串连接起来组成⼀个字符串时,选⽤()函数。

A. strlen()B. strcap()C. strcat()D. strcmp()4. 对于任⼀个类,⽤户所能定义的析构函数的个数⾄多为( )。

A. 0B. 1C. 2D. 任意个5. 对类中引⽤成员的初始化是通过构造函数中给出的( )实现的。

A. 函数体B. 参数表C. 初始化表D. 初始化表或函数体6. 假定AB为⼀个类,则执⾏“AB x(a,5);”语句时将⾃动调⽤该类的( )。

A. 带参构造函数B. ⽆参构造函数C. 拷贝构造函数D. 赋值重载函数7. 对于任⼀个类,⽤户所能定义的析构函数的个数⾄多为( )。

A. 0B. 1C. 2D. 任意个8. ⽤new运算符创建⼀维整型数组的正确语句是__________。

A. int *p=new a[10];B.int *p=new float[10];C. int *p=new int[10];D.int *p=new int[5]={1,2,3,4,5}9. 假定有定义“int b[10]; int *pb;”,则不正确的赋值语句为()。

A. pb=b;B. pb=&b[0];C. pb=new int;D. pb=b[5];10. 程序中主函数的名字为()。

A. mainB. MAINC. MainD. 任意标识符11. 为了提⾼程序的运⾏速度,可将不太复杂的功能⽤函数实现,此函数应选择()。

A. 内联函数B.重载函数C.递归函数D.函数模板12. 将两个字符串连接起来组成⼀个字符串时,选⽤()函数。

A. strlen()B. strcap()C. strcat()D. strcmp()13. ⽤new运算符创建⼀维整型数组的正确语句是__________。

面向对象测试题及答案

面向对象测试题及答案

面向对象测试题及答案一、选择题(每题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`方法以显示电动汽车启动的信息。

面向对象程序设计习题及答案

面向对象程序设计习题及答案

面向对象程序设计一、选择填空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 )是正确的。

java面向对象程序设计期末考试题及答案

java面向对象程序设计期末考试题及答案

java面向对象程序设计期末考试题及答案一、单项选择题(每题2分,共20分)1. 在Java中,哪个关键字用于声明一个类?A. classB. structC. interfaceD. enum答案:A2. 下列哪个是Java中的访问修饰符?A. publicB. privateC. protectedD. All of the above答案:D3. 在Java中,哪个关键字用于创建对象?A. newB. createC. makeD. instantiate答案:A4. Java中的继承是通过哪个关键字实现的?A. extendsB. inheritC. deriveD. superclass答案:A5. 在Java中,哪个关键字用于实现接口?A. implementsB. extendsC. interfaceD. abstract答案:A6. 下列哪个不是Java中的方法重载的条件?A. 方法名相同B. 参数列表不同C. 返回值类型不同D. 访问修饰符不同答案:C7. 在Java中,哪个关键字用于声明一个抽象方法?A. abstractB. virtualC. overrideD. final答案:A8. Java中的多态性可以通过哪种方式实现?A. 方法重载B. 方法覆盖C. 接口实现D. 继承答案:B9. 在Java中,哪个关键字用于声明一个内部类?A. innerB. nestedC. staticD. inner class答案:B10. Java中的垃圾回收机制是自动的吗?A. YesB. NoC. SometimesD. Depends on the JVM答案:A二、填空题(每题2分,共20分)1. Java中,一个类可以继承另一个类的______方法和属性。

答案:非私有2. Java中的______关键字用于声明一个类是不可被继承的。

答案:final3. 在Java中,______关键字用于声明一个类是抽象的。

面向对象程序设计习题

面向对象程序设计习题

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输出结果;。

面向对象程序设计模拟练习题(含答案)

面向对象程序设计模拟练习题(含答案)

面向对象程序设计模拟练习题(含答案)一、单选题(共50题,每题1分,共50分)1、下列关于JDK和JRE的说法中,错误的是()A、JDK是java开发核心组件,是用来编译解释java程序的核心组件B、JDK包括Java编译器、Java文档生成工具、Java打包工具等C、JRE是个单独的软件,所以安装JDK后,还需要单独安装JRED、JRE是java运行环境,用来支持java程序的运行正确答案:C2、下列File类的构造方法格式,错误的是()A、File(File parent)B、File(String pathname)C、File(String parent,String child)D、File(URI url)正确答案:A答案解析:A选项,正确的应该是File(File parent, String child)3、下列关于静态变量的描述中,错误的是()A、静态变量指的是被static修饰的变量B、静态变量是随着类的加载而加载C、静态变量可以被所有的实例对象共享D、静态变量同成员变量一样,都需要通过实例对象来调用正确答案:D答案解析:静态变量是通过“类名.变量名”“方式调用的。

4、下列对于Runtime的描述中,正确的是()A、每一个Java应用程序运行时都产生一个Runtime类实例B、Runtime实例可以将应用程序和运行环境相结合C、Runtime类有构造函数D、Runtime实例需要被创建后才可以通过getRuntime()方法获取正确答案:A答案解析:Runtime类用于表示虚拟机运行时的状态,它用于封装JVM虚拟机进程。

每次使用java命令启动虚拟机都对应一个Runtime实例,并且只有一个实例,因此该类采用单例模式进行设计,可以通过getRuntime()方法获得一个Runtime实例。

5、下列关于LinkedList类的方法,不是从List接口中继承而来的是()A、toArray()B、pop()C、remove()D、isEmpty()正确答案:B答案解析:pop()方法表示移除并返回此列表的第一个元素,是LinkedList特有的方法。

《面向对象程序设计》习题

《面向对象程序设计》习题

《面向对象程序设计》习题一、单项选择题1、下面关于引用的说法错误的是( )。

A、引用是被引用对象的别名B、对引用的修改就是对被引用对象的修改,反之亦然C、引用不一定立即初始化D、引用不能建立数组2、用new运算符创建一个含有10个元素的一维整型数组的正确语句是( )。

A、int p = new int(10);B、int p = new int[10];C、int *p = new int [10];D、int *p = new int(10);3、下面是五条顺序出现的声明语句,非法的初始化语句是( )。

A、int i = –1;B、const int ic=i;C、const int *pc=&ic;D、int *const cpi=&ic;E、const int *const cpic= &ic;4、下列说法不正确的是( )。

A、在类中,成员的默认访问特性是私有的。

B、类封装了数据和操作。

C、类实质上是一种数据类型。

D、在类的定义中,必须包含private、public、protected三种存取方式对应得部分。

5、下列说法不正确的是( )。

A、在类中不能对所定义的数据成员进行初始化。

B、类的公有成员函数是类与外界的接口。

C、同一个类的两个对象占用相同的内存空间。

D、类实现数据隐藏。

6、下列程序段不会发生二义性的是( )。

A、int fun(double p){...;}B、int fun(float p){...;}float fun(float p){...;} float fun(unsigned p){...;}int x; int x;x=fun(0); x=fun(0);C、int fun(int i,int j=2){...;}D、int fun(int i=2,int j=2){...;}float fun(int i){...;} int fun(int *p){...;}cout<<fun(5); cout<<fun(5);7、关于以下程序段中语法错误的正确描述是( )。

面向对象程序设计综合练习题

面向对象程序设计综合练习题

面向对象程序设计综合练习题一、单项选择题1-1.C++语言是从早期的C语言逐步发展演变而来的,与C语言相比,它在求解问题方法上进行的最大改进是( B )。

A.面向过程 B.面向对象 C.安全性 D.复用性 1-2. C++源程序文件的缺省扩展名为( A )。

A. cppB. exeC. objD. lik1-3.由C++源程序文件编译而成的目标文件的缺省扩展名为( C )。

A. cpp B. exe C. obj D. lik1-4.由C++目标文件连接而成的可执行文件的缺省扩展名为( B )。

A. cpp B. exe C. obj D. lik1-5.编写C++程序一般需经过的几个步骤依次是( B )。

A. 编译、编辑、连接、调试 B. 编辑、编译、连接、调试C. 编译、调试、编辑、连接D. 编辑、调试、编辑、连接1-6.用“>>”运算符从键盘输入多于一个数据时,各数据之间应使用( D )符号作为分隔符。

A.空格或逗号 B.逗号或回车 C.逗号或分号 D.空格或回车1-7.C++中声明常量的关键字是( A )。

A.const B.extern C.public D.enum 1-8.以下叙述中正确的是( B )A. 使用#define可以为常量定义一个名字,该名字在程序中可以再赋另外的值B. 使用const定义的常量名有类型之分,其值在程序运行时是不可改变的C.在程序中使用内置函数使程序的可读性变差D. 在定义函数时可以在形参表的任何位置给出缺省形参值1-9.下列的符号常变量定义中,错误的定义是( C )。

A.const M=10; B.const int M=20;C.const char ch; D.const bool mark=true; 1-10.函数原型语句正确的是( B )。

A.int Function(void a) B.void Function (int); C.intFunction(a); D.void int(double a); 1-11.以下正确的函数原型语句是( C )。

面向对象的程序设计试题库

面向对象的程序设计试题库

面向对象的程序设计一、单项选择题1、下面那种结构不是C++的控制结构()A 顺序结构B 选择结构C 循环结构D 判断结构答: D2、下列是C++语言中合法标识符的是()。

A.3three B.ifC._1oneD.while答:C3、下列是合法的C++语言语句的是()。

A.if(x>0) then x=x-1;else x=x+1;B.if(x>0) x=x-1;else x=x+1;C.if x>0 x=x-1;else x=x+1;D.if x>0 x=x-1;答:B4、下面那一种不是计算机内部表示整数的方法()A 二进制码B原码C 补码D反码答:A5、在C++语言中,下列数为合法的实数的是()。

A.5E-3B.5E-3.5C. E5D.-3.5E答:A6、C++语言中数据类型最大的是()A longB floatC intD char7、如果一个函数可以在定义中直接或间接的调用自己,这样的函数称为()。

A.函数声明B.嵌套函数C.定义函数D.递归函数答:D8、表达式0x55^0xB4的结果为()。

A.0xF5B.0x15C.0xE1D.0x1E答:C9、C++中,源代码文件后缀为()A .cppB .objC .exeD .c答: A10、0X5A&0XB7结果是()A 0X13B 0X12C 0X14D 0X15答: B二、填空题1、程序的基本控制结构包括()、()和()。

答:顺序结构,选择结构,循环结构2、用来解决问题的,与有限多个步骤组成的具体过程称为()。

答:算法3、整数类型变量a和b被初始化为3和10,则循环语句while(a<=b) a=a+2;共执行()次,执行完语句后a的值为(),b的的值为()。

答:4,11,10)。

答:警告信息,致命错误5、计算机中的数据可以分为()和()两大类。

答:数值型、字符型6、字符型数据有两种编码方法:()和()答:有美国国家标准局制定的ASCII码、IBM公司提出的EBCDIC码7、通过C++ 语言中的()机制,可以从现存类中构建其子类。

面向对象程序设计试卷

面向对象程序设计试卷

面向对象程序设计试卷一、选择题(每题2分,共20分)1. 面向对象程序设计中的三大特征是:A. 封装、继承、多态B. 抽象、封装、继承C. 封装、继承、封装D. 继承、多态、封装2. 下列哪个不是面向对象程序设计的优点?A. 代码重用B. 易于维护C. 程序复杂度低D. 可扩展性好3. 在Java中,哪个关键字用于定义类?A. classB. structC. interfaceD. type4. 以下哪个是Java中不允许的类名?A. MyClassB. 2MyClassC. MyClass2D. MyClass_5. 在面向对象程序设计中,以下哪个概念不是用于实现封装?A. 私有成员B. 公有方法C. 访问控制D. 继承6. 下列哪个不是Java的访问控制修饰符?A. publicB. privateC. protectedD. global7. 以下哪个是Java中不允许的方法名?A. myMethodB. _myMethodC. my_methodD. myMethod_8. 在Java中,哪个关键字用于实现继承?A. extendsB. inheritC. deriveD. base9. 以下哪个不是Java的多态性实现方式?A. 接口B. 抽象类C. 重载D. 重写10. 在Java中,哪个关键字用于定义接口?A. interfaceB. protocolC. abstractD. type二、简答题(每题10分,共30分)1. 简述面向对象程序设计中封装的概念,并给出一个封装的简单示例。

2. 解释什么是多态性,并说明多态性在面向对象程序设计中的重要性。

3. 描述继承在面向对象程序设计中的作用,并举例说明如何使用继承来提高代码的复用性。

三、编程题(每题25分,共50分)1. 定义一个名为`Student`的类,包含以下属性:- 姓名(String类型)- 学号(String类型)- 年龄(int类型)并为该类实现以下方法:- 一个构造函数,用于初始化姓名、学号和年龄。

面向对象程序设计-试卷[附参考答案]

面向对象程序设计-试卷[附参考答案]

《面向对象程序设计》试卷第一学期“本科”期末考试计算机专业面向对象程序设计试题一、单项选择题(每小题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++显示输出屏幕上的光标从当前位置移动到下一行的开始位置。

面向对象程序设计考试模拟题含参考答案

面向对象程序设计考试模拟题含参考答案

面向对象程序设计考试模拟题含参考答案一、单选题(共50题,每题1分,共50分)1、下列数据结构中,哪一个是ArrayList类的底层实现()A、数组结构B、链表结构C、哈希表结构D、红黑树结构正确答案:A答案解析:ArrayList的底层是数组实现的。

2、Java属于以下哪种语言()A、机器语言B、汇编语言C、高级语言D、以上都不对正确答案:C答案解析:Java是一门高级编程语言。

3、下面关于path和classpath的说法中,错误的是()A、path用来指定java虚拟机(JVM)所在的目录B、classpath用来指定我们自己所写的或要用到的类文件(.jar文件)所在的目录C、在dos命令行中,classpath和path环境变量的查看与配置的方式不相同D、只要设置了classpath这个环境变量系统就不会再在当前目录下查询某个类正确答案:C答案解析:classpath和path环境变量的查看与配置的方式完全相同,都是通过 set关键字实现的。

4、若double val = Math.ceil(-11.9);,则val的值是()A、11.9B、-11.0C、-11.5D、-12.0正确答案:B答案解析:ceil是天花板的意思,表示向上取值,永远是得到大于参数的最小整数。

5、下列集合中,不属于Collection接口的子类的是()A、ArrayListB、LinkedListC、TreeSetD、Properties正确答案:D答案解析:Properties集合属于Map集合的子类。

6、下列关于类与对象的说法中,错误的是()A、类是对某一类事物的抽象描述,而对象则是该类事物的个体。

B、对象是类的实例化。

C、类用于描述多个对象的共同特征,它是对象的模板。

D、类与对象没有什么实际关系。

正确答案:D答案解析:对象是通过类来创建的。

7、下列关于List接口的描述中,错误的是()A、List接口继承自Collection接口,是单列集合。

面向对象程序设计习题

面向对象程序设计习题
正确答案是:C
5、下面关于私有继承方式的论述中错误的是()。A基类中的私有成员对其对象不可见B基类中的私有成员对其派生类不可见C基类中的公有成员对其派生类可见D基类中的保护成员对其派生类不可见
s3=s1+s2;
print(s3,2);
return 0;
}
void print(student b,int n)
{
cout<<b.x/n<<endl<<b.y/n<<endl<<b.z/n<<endl;
}
南开18秋学期(1703)《面向对象程序设计》在线作业-2 1、D 2、A 3、D 4、C 5、D一、单选题共35题,70分
D.fstream infile(d:\\file.dat, ios::in| ios::out);
答案:D
21.在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则()。A.完全相同B.完全不同
C.部分相同,部分不同D.以上都不对
答案:A
22.面向对象程序设计思想的主要特征中不包括( )。A.封装性B.多态性C.继承性D.功能分解,逐步求精
A.A(60)
B.SetNum(60)
C.ptr->SetNum(60)
D.ptr->n=60
答案:C
4.下面叙述错误的是( )。
A.派生类可以使用private派生
B.对基类成员的访问必须是无二义性的
C.基类成员的访问能力在派生类中维持不变
D.赋值兼容规则也适用于多继承的组合
答案:C
5.抽象类的作用主要是()。
delete []v
ARRAY::

面向对象程序设计试题及答案

面向对象程序设计试题及答案

面向对象程序设计试题及答案一、试题1. 请简要解释面向对象(Object-Oriented)程序设计的概念。

2. 列举面向对象程序设计中的四个基本特征,并分别进行简要描述。

3. 请说明封装(Encapsulation)在面向对象程序设计中的作用和优势。

4. 解释继承(Inheritance)在面向对象程序设计中的概念和用途。

5. 什么是多态(Polymorphism)?请解释多态的概念以及其在面向对象程序设计中的重要性。

6. 简要介绍抽象类(Abstract Class)和接口(Interface)的概念,并说明它们之间的区别。

7. 请解释类(Class)与对象(Object)之间的关系。

8. 在面向对象程序设计中,什么是构造函数(Constructor)?请说明构造函数的作用和使用方法。

9. 请示范一个使用面向对象程序设计的简单实例,并说明你所设计的类的结构和功能。

二、答案1. 面向对象程序设计是一种以对象为中心的编程方法,通过定义表示对象属性和行为的类来组织程序结构,以实现代码的重用性、灵活性和可维护性。

2. (1)封装:将数据和对数据的操作封装在一个类中,通过访问权限控制,保护数据的安全性和完整性。

(2)继承:通过建立类之间的继承关系,实现代码的重用,具有层次性和扩展性。

(3)多态:允许不同类的对象对同一消息作出不同的响应,实现代码的灵活性和扩展性。

(4)抽象:通过抽象类和接口的定义,隐藏对象的具体实现细节,提供统一的接口和规范。

3. 封装的作用是将数据和对数据的操作封装在一个类中,外部无法直接访问类的内部实现细节,只能通过类提供的接口访问和操作数据。

封装的优势包括:(1)提高代码的可维护性和可读性,减少代码的重复。

(2)保护数据的安全性和完整性,防止外部直接对数据进行非法操作。

(3)降低模块之间的耦合度,提高代码的灵活性。

4. 继承是面向对象程序设计中的一个重要概念,它通过建立类与类之间的继承关系,实现代码的重用和扩展。

java面向对象程序设计练习题(有答案)

java面向对象程序设计练习题(有答案)

满分:100 分姓名:班级:学号:1. 填空题 ( 5.0 分 )面向对象三大特征______ ______ ______正确答案:封装继承多态2. 填空题 ( 5.0 分 )使用static 修饰的变量称为静态变量,静态变量可以有两种访问方式,分别是对象名.静态变量名和______正确答案:类名.静态变量名3. 单选题 (4.0 分 )下面关于java 中类的说法哪个是不正确的A. 构造函数是类中的特殊方法B. 类一定要声明为public 的,才可以执行C. 在软件设计中,类,就是一个模板,它定义了通用于一个特定种类的所有对象的属性(变量)和行为(方法)D. 一个java 文件中可以有多个class 定义(但只能有一个public 修饰的类)正确答案:B4. 单选题 ( 4.0 分 )关于类中可以包含的内容,如下说法错误的是()A. 类中可以包含属性和方法B. 类中可以直接包含代码块C. 类中可以嵌套定义类D. 类中不能包含其他类正确答案:D5. 单选题 ( 4.0 分 )构造方法是否可被重写和重载()A. 不能重写,可以重载B. 可以重写,不能重载C. 不能重写,不能重载D. 可以重写,可以重载正确答案:A6. 单选题 ( 4.0 分 )关于封装的好处,以下错误的是()A. 隐藏实现的细节B. 方便修改的实现C. 只能通过规定方法访问D. 实现代码复杂化正确答案:D7. 单选题 ( 4.0 分 )在Java 中,下面描述正确的是()A. 一个子类可以有多个父类,一个父类也可以有多个子类B. 一个子类可以有多个父类,但一个父类只可以有一个子类C. 一个子类只可以有一个父类,但一个父类可以有多个子类D. 以上说法都不对正确答案:C8. 单选题 ( 4.0 分 )Java 语言的类间的继承关系是A. 多重的B. 单继承C. 线程的D. 不能继承正确答案:B9. 单选题 ( 4.0 分 )以下关于this 和super 关键字的说法错误的是()A. this 关键字指向当前对象自身,super 关键字指向当前对象的直接父类B. 在main 方法中可以存在this 或者super 关键字,但不能同时存在。

面向对象程序设计试题样例

面向对象程序设计试题样例

一、单项选择题(本大题共10小题)1. 关于面向对象的程序设计必须具备的关键要素, 以下说法最正确的是( )A. 抽象和封装B. 抽象和多态性C. 抽象、封装和继承性D. 抽象、封装、继承和多态性2.在下列成正确表示式中, 运算符”+”的意义不相同的一对是( )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+2二、填空题(本大题共10小题)3.在已经定义了整型指针ip后, 为了得到一个包括10个整数的动态数组并由ip指向这个数组, 应使用语句_______________。

ip=new int[10];4.在函数头与函数体之间加_____________关键字能够防止覆盖函数改变数据成员的值。

三、改错题(本大题共5小题)5. 用横线标出下面main函数中的错误, 说明错误原因并改正。

#include <iostream>using namespace std;class Base0 { //定义基类Base0public:int var0;void fun0() { cout << "Member of Base0" << endl; }};class Base1: public Base0 { //定义派生类Base1public: //新增外部接口int var1;};class Base2: public Base0 { //定义派生类Base2public: //新增外部接口int var2;};class Derived: public Base1, public Base2 { //定义派生类Derivedpublic: //新增外部接口int var;void fun() { cout << "Member of Derived" << endl; }};int main() { //程序主函数Derived d; //定义Derived类对象dd.var0=1;d.fun0();return 0;}6.下面的程序类B的定义中有一处错误, 请用下横线标出错误并说明错误原因。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面向对象程序设计练习题
面向对象程序设计练习题
面向对象程序设计是一种常用的软件开发方法,它将现实世界中的事物抽象成
对象,通过定义对象的属性和方法来描述其行为。

这种编程方法可以提高代码
的可重用性、可维护性和可扩展性。

下面将介绍几个面向对象程序设计的练习题,帮助读者更好地理解和应用这一编程方法。

1. 汽车租赁系统
设计一个汽车租赁系统,包括汽车类、客户类和租赁记录类。

汽车类包括车牌号、品牌、型号和日租金等属性,客户类包括姓名、联系方式等属性,租赁记
录类包括租车日期、租期和总租金等属性。

实现以下功能:
- 客户可以查看可租赁的汽车列表;
- 客户可以选择汽车租赁,并记录租车日期和租期;
- 客户可以查看自己的租赁记录和总租金。

2. 图书管理系统
设计一个图书管理系统,包括图书类、读者类和借阅记录类。

图书类包括书名、作者、出版社和价格等属性,读者类包括姓名、学号等属性,借阅记录类包括
借书日期、归还日期等属性。

实现以下功能:
- 图书管理员可以添加、删除和修改图书信息;
- 读者可以查询图书信息,并借阅或归还图书;
- 读者可以查看自己的借阅记录和逾期情况。

3. 银行账户管理系统
设计一个银行账户管理系统,包括账户类、客户类和交易记录类。

账户类包括
账户号码、余额等属性,客户类包括姓名、联系方式等属性,交易记录类包括交易日期、交易类型和交易金额等属性。

实现以下功能:
- 客户可以查询账户余额;
- 客户可以进行存款和取款操作,并记录交易记录;
- 客户可以查看自己的交易记录和账户余额变动情况。

通过以上练习题,读者可以锻炼面向对象程序设计的能力,熟悉类的定义、属性和方法的使用,以及对象之间的交互。

在实现这些功能的过程中,读者需要考虑如何合理组织代码结构,如何处理异常情况,以及如何提高代码的可读性和可维护性。

在实际的软件开发中,面向对象程序设计是一种非常常用的编程方法。

它不仅可以提高代码的质量,还可以提高开发效率。

因此,掌握面向对象程序设计的技巧对于软件开发人员来说是非常重要的。

希望读者通过以上练习题的实践,能够更好地理解和运用面向对象程序设计的思想和方法。

相关文档
最新文档