面向对象技术练习
- 格式:ppt
- 大小:311.00 KB
- 文档页数:41
《面向对象技术(本)》课程第四阶段练习题答案一、填充题答案:1.private2.static3.import java.util.*;4.后期,前期5.Math.cos(30*3.14/180)二、选择题答案:1.B 2.A 3.C 4.D 5.C三、简答题答案:1.在面向对象的程序设计语言中,类是一种特殊属性类型,类可以看作具有共同属性和行为的事物的抽象。
在类中包含了变量和与变量有关的操作(方法)。
对象是类的实例。
类和对象的关系就如同属性类型和变量的关系。
例如,“电话”类代表电话这一类事物,而电话的对象代表一个具体的电话。
2.当外部的类可以没有限制地直接访问、修改类中变量时,是非常危险的。
因此必须限制类的外部程序对类内部成员的访问,这就是类的封装目的。
类把属性和方法封装起来,同时创建一些允许外部访问的方法,通过这样的方法来访问类的成员变量。
封装的另一目的是细节屏蔽,便于程序功能的扩展和程序的维护。
3.Java中有四种访问权限:公有的(public)、保护的(protected)、默认的、私有的(private)。
各种权限的访问级别如下表:4.null表示空对象,即没有创建类的任何实例。
当我们声明对象时,如果没有用new 实例化时,此时它就被初始化为一个特殊的值“null”。
而当我们在类的方法定义中需要引用正在使用该方法的对象时,可以用“this”表示。
uper表示对某个类的超类的引用,用super来引用被子类屏蔽的超类的成员。
5.不能被继承的类称为最终类。
在声明类时,用final将类声明为最终类,这样此方法不会在子类中被覆盖(即子类中不能有和此方法同名的方法)。
抽象类则是必须被子类覆盖的类。
在声明类或方法时,用关键字abstract可以将类或方法声明为抽象类或方法。
抽象方法没有方法体,含有抽象方法的类即为抽象类,它是不能实例化的类。
6.多态性是面向对象程序设计的重要特征,是指同一个名字的若干个方法,有不同的实现(即方法体中的代码不一样)。
软件设计师-面向对象技术(二)(总分29,考试时间90分钟)1. 面向对象程序设计语言中提供的继承机制可将类组织成一个______结构,以支持可重用性和可扩充性。
A. 栈B. 星形C. 层次D. 总线2. 在C++语言中,若类C中定义了一个方法intf(int a,int b),那么方法不能与该方法同时存在于类C中。
A. int f(int x,int y)B. int f(float a,int b)C. float f(int x,float y)D. int f(int x,float y)3. 下面关于面向对象的描述正确的是______。
A. 针对接口编程,而不是针对实现编程B. 针对实现编程,而不是针对接口编程C. 接口与实现不可分割D. 优先使用继承而非组合4. 面向对象技术中,对象是类的实例。
对象有三种成分:______、属性和方法(或操作)。
A. 标识B. 规则C. 封装D. 消息5. 已知3个类A、B和C,其中类A由类B的一个实例和类C的1个或多个实例构成。
能够正确表示类A、B和C之间关系的UML类图是_____。
6. 面向对象的测试可分四个层次,按照由低到高的顺序,这四个层次是______。
A. 类层——模板层——系统层——算法层B. 算法层——类层——模板层——系统层C. 算法层——模板层——类层——系统层D. 类层——系统层——模板层——算法层7. 在UML中,______用于描述系统与外部系统及用户之间的交互。
A. 类图B. 用例图C. 交互图D. 协作图8. 以下关于单身模式(Singleton)的描述中,正确的是______。
A. 它描述了只有一个方法的类的集合B. 它能够保证一个类只产生唯一的一个实例C. 它描述了只有一个属性的类的集合D. 它能够保证一个类的方法只能被唯一一个类调用9. 类的实例化过程是一种合成过程,而不仅仅是根据单个类型进行的空间分配、初始化和绑定。
面向对象程序设计C++复习资料与答案第一、二、六、七章习题一、选择题1、系统约定C++源程序文件名的缺省的扩展名为()A、bccB、c++C、cppD、vcc2、面向对象的程序设计将数据与( )放在一起,作为一个相互依存、不可分割的整体来处理.A、对数据的操作B、信息C、数据隐藏D、数据抽象3、当一个函数无返回值时,函数的类型应定义为()A、voidB、任意C、intD、无4、对于C++的函数,正确的叙述是:A、函数的定义不能嵌套,但函数的调用可以嵌套B、函数的定义不能嵌套,但函数的调用不能嵌套C、函数的定义和调用都不能嵌套D、函数的定义和调用都可以嵌套5、下列语句中错误的是( )A、int *p=new int(10);B、int *p=new int[10]C、int *p=new int;D、int *p=new int[40](0);6、假设已经有定义:const char *const name=”chen”;,下面的语句中正确的是:()A、name[3]=’a’;B、name=”lin”;C、name=new char[5]; D、cout<〈name[3];7、假设已经定义:char *const name=”chen”;, 下面的语句中正确的是:( )A、name[3]=’q';B、name=”lin”;C、name=new char[5];D、name=new char(‘q’);8、假设已经定义:const char *name=”chen”;,下面的语句中错误的是:( )A、name[3]=’q’;B、name=”lin”;C、name=new char[5];D、name=new char(‘q’);9、下面的类型声明中正确的是:( )A、int &a[4];B、int &*p;C、int &&qD、int i,*p=&i;10、假设定义了函数模板( )template 〈class T>T max(T x,T y){ return(x>y)?x:y;}并定义了int i;char c;错误的调用语句是:()A、max(i,i)B、max(c,c)C、max((int)c,i);D、max(i,c)11、模板的使用是为了( )A、提高代码的可重用性B、提高代码的运行效率C、加强类的封装性D、实现多态性12、设有二个语句:int x[‘a’];cin>>x;则编译器认为()A、说明语句int x[‘a’]错B、二个语句都错C、语句cin〉〉x 错D、二个语句正确,没有语法错13、设有语句:void f(int a[10],int &x);int y[10],*py=y,n;则对函数f的正确调用语句是( )A、f(py[10],n);B、f(py,n)C、f(*py,&n)D、f(py,&n)14、在C++中实现封装是借助于()A、枚举B、类C、数组D、函数15、对于下面几个函数:(1) void f(int x,float y){……}(2) int f(int a,float b){…… }(3) int f(int i,int j){……}(4) float k(int x){…… }是重载函数。
期末复习试卷〔三〕一、单项选择题1、有一段java应用程序,其中包含一个公共类,名字为TestStudent,那么保存它的源文件名是〔〕A. teststudent.javaB. teststudent .classC. TestStudent.java正确答案:C解析:一个java文件中可以包含多个类,但最多只能有一个类是公共类〔public〕,该java文件的名字要与公共类的一致。
2、关于下面的代码,哪个描述是正确的?public class Test{public static void main(String[] args){Integer n1 = new Integer(3);Object n2 = new Integer(4);System.out.println(n1 pareTo(n2));}}A. 可以编译通过,可以运行,并得到预期结果。
B. 可以编译通过,可以运行,但不能得到预期结果。
C. 可以编译通过,但又运行错误。
D. 有编译错误。
正确答案:D解析:Integer类是基本数据类型int的包装类,里面封装了一个int类型的值,提供了一些实用的方法〔例如:在JavaFX中读取文本框内容是String类型的,如果要转换成int类型,就要调用Integer类的parseInt()方法〕并实现了Comparable接口,在Comparable接口中定了抽象方法compareTo(T o), T是泛型,对于Integer类,T 被替换为Integer,如以下图:因此,Integer类中compareTo()方法的定义如下:因此,compareTo的参数只能是Integer类型的,所以代码中的下面语句中的n2的类型需要进行强制类型转换,由Object转为Integer:System.out.println(n1 pareTo(n2));正确写法如下:System.out.println(n1 pareTo((Integer) n2));类似的包装类还有Long\Float\Double\Char\Boolean等,都是将基本数据类型包装为类。
期末复习试卷(五)一、程序题1.请根据UML图, 代码实现Person类、Student类和Volunteer接口旳定义。
解题规定: 编写测试程序, 创立一种名为”Tom”旳一年级学生, 这名学生参与了“北京青年志愿者协会”旳活动。
输出该学生旳姓名、年级及所属社团旳信息。
效果如下:interface Volunteer{public abstract String volunteer(String organization);}class Person{private String name;(1)2.根据给定旳GeometricObject类层次图, 分别实现GeometricObject、Circle和Triangle类。
规定:(2)按照类图, 定义各类旳数据域属性和措施。
(3)默认旳GeometricObject旳颜色为white。
默认旳Circle对象旳半径为10。
默认旳Triangle对象旳三边为(3, 4, 5)。
(4)GeometricObject类旳toString()措施, 返回对象旳颜色信息。
Circle和Triangle旳toString()措施, 覆盖父类旳toString(), 分别返回包括颜色信息、半径或边长旳信息。
(5)GeometricObject类实现parable接口, 覆盖public int compareTo()措施, 实现两个几何对象在周长上旳比较。
(6)Circle和Triangle类分别覆盖实现getPerimeter()。
编写一种顾客程序:(1)创立一种几何对象数组object;(2)分别寄存一种默认旳圆、一种半径为20旳圆、一种默认旳三角形和一种三边为(10, 20, 15)旳三角形;(3)计算这一组几何对象旳总周长并输出;(4)使用toString(),输出每个几何对象旳有关信息;(5)使用java.util.Arrays.sort()措施, 对几何对象数组中旳几何图形, 按周长进行排序, 并输出排序成果。
《面向对象技术》试卷2一、选择题(每题2分,共20分,答案填写在题后的表格内)1.下列语句中错误的是()A. int *p=new int(10) ;B. int *p=new int[10] ;C. int *p=new int ;D. int *p=new int[40](0)2.假设已经有定义char *const name=”chen” ;下面的语句中正确的是()A. name[3]=‟q‟;B. name=”lin”;C. name=new char[5]D. name=new char(…q‟);3.下面的类型声明中正确的是()A. int &a[4]B. int &*p ;C. int &&q ;D. int I,*p=& I ;4.在声明类时,下面的说法正确的是()A.可以在类的声明中给数据成员赋值B. 数据成员的数据类型可以是registerC. private、public、protected可以按任意顺序出现D. 没有用private、public、protected定义的数据成员是公有成员5.构造函数是在()时被执行的。
A.程序编译B. 创建对象C. 创建类D.程序装入内存6.在下面有关友元函数的描述中,正确的说法是()A. 友元函数是独立于当前类的外部函数B.一个友元函数不能同时定义为两个类的有友元函数C.友元函数必须在类的外部定义D.在外部定义友元函数时,必须加关键字friend7.使用派生类的主要作用是()A.提高代码的可重用性B.提高程序的运行效率C.加强类的封装性D.实现数据的隐藏8.关于虚函数,正确的描述是()A.构造函数不能是虚函数B.析构函数不能是虚函数C.虚函数可以是友元函数D.虚函数可以是静态成员函数9.如果在基类中将成员函数show声明为不带返回值得纯虚函数,正确的写法是()A.virtual show( )=0;B.virtual void show( )C.virtual void show( )=0;D.void show( )=0 virtual;10.使用myFile.open(“sales.dat”,ios::app)语句打开文件sales.dat后,则()二、分析下列程序中的错误,并说明原因(前2题每题6分,第三题8分,共20分)1.#include"iostream.h"class student{char name[10];int age;float aver;void printStu( ){}};void main( ){student p1,p2,p3;p1.age=16;//…} 2. #include"iostream.h" class stack{public:stack(int sz); private:char *p;int size;};stack::stack(int sz) {p=new char[size=sz]; }void main(){stack stt;//...}3.#include"iostream.h"class CTest{public:const int y2;CTest(int i1,int i2):y1(i1),y2(i2) {y1=10; int readme()const;//...private:int x;const int y1;};int CTest::readme()const {x++;return x; }void main() {CTest c(2,8);int i=c.y2;i=c.y1;}2题每题6分,第三题8分,共20分)1.#include"iostream.h"class toy{public:toy(int q,int p){ quan=q; price=p;}int get_quan(){return quan;}int get_price(){return price;}private:int quan,price;};int main(){toy op[2][2]={toy(10,20),toy(30,48),toy(50,68),toy(70,80)};int i;for(i=0;i<2;i++){cout<<op[i][0].get_quan()<<",";cout<<op[i][0].get_price()<<"\n";cout<<op[i][1].get_quan()<<",";cout<<op[i][1].get_price()<<"\n";}cout<<"\n";return 0;}2.#include"iostream.h"class Stock{public:void print(){cout<<"Stock class.\n";}};class Der1_Stock:public Stock{public:void print(){cout<<"Deri1_Stock class.\n";}};class Der2_Stock:public Stock{public:void print(){cout<<"Deri2_Stock class.\n";}第一题运行结果:第二题运行结果:Stock s1;Der1_Stock d1; Der2_Stock d2; ptr=&s1;ptr->print(); ptr=&d1;ptr->print(); ptr=&d2;ptr->print(); }3.#include"iostream.h" class A {public:A(int i):xi(i){} A(){xi=0;}friend A operator++(A a); friend A operator--(A &a); void print(); private: int xi; };A operator++(A a) {++a.xi; return a; }A operator--(A &a) {--a.xi; return a; }void A::print() { cout<<xi<<endl;} void main() {A i(7); ++i;i.print(); --i;i.print(); }四、设计题(每题10分,共40)1.下面是一个计算器类的定义,根据注释语句的提示,完成该类成员函数的实现class counter {public:counter(int number); //构造函数,初始化计数器 void increment(); //给计数器加1 void decrement(); //给计数器减1 int getvalue(); //取得计数器的值 int print(); //显示计数 private:int value; //计数器 第三题运行结果:程序:2.下面的程序包含了Time类和Date类的声明,要求设计一个Birthtime类,它继承了Time类和Date类,并且还有一项出生孩子的名字Childname,同时设计主程序显示一个小孩的出生时间和名字。
Java语言及面向对象技术复习资料一、单项选择题。
1、下列哪个是Java应用程序主类中正确的main方法?()A.public void main(String args[])B.static void main(String args[])C.public static void Main(String args[])D.public static void main(String args[])2、下列哪项是正确的float变量的声明?()A.float foo=-1; B.float foo=1.0;C.float foo=2.02f; D.float foo=0x0123;3、对于int a[]=new int[3];下列哪个叙述是错误的?()A.a.length的值是3。
B.a[1]的值是1。
C.a[0]的值是0。
D.a[a.length-1]的值等于a[2]的值。
4、下列哪个叙述是正确的?()A.5.0/2+10的结果是double型数据。
B.(int)5.8+1.0的结果是int型数据。
C.’苹’+’果’的结果是char型数据。
D.(short)10+’a’的结果是short型数据。
5、对于下列Hello类,哪个叙述是正确的?()A.Hello类有2个构造方法。
B.Hello类的int Hello()方法是错误的方法。
C.Hello类没有构造方法。
D.Hello无法通过编译,因为其中的hello方法的方法头是错误的(没有类型)。
class Hello {Hello (int m) {}int Hello() {Return 20;}hello() {}}6、下列哪个叙述是正确的?()A.成员变量的名字不可以和局部变量的名字相同。
B.方法的参数的名字可以和方法中声明的局部变量的名字相同。
C.成员变量没有默认值。
D.局部变量没有默认值。
7、下列哪个叙述是正确的?()A.子类继承父类的构造方法B.abstract类的子类必须是非abstract类C.子类继承的方法只能操作子类继承和隐藏的成员变量D.子类重写或新增的方法也能直接操作被子类隐藏的成员变量8、下列程序中注释的哪个代码(A,B,C,D)是错误的(无法通过编译)?()class A {static int m;static void f() {m=20; //A}}class B extends A {void f() //B{ m=222; //C}}class E {public static void main(String args[]) {A.f();}}9、将下列哪个代码(A,B,C,D)放入程序中标注的【代码】处将导致编译错误?()A.public float getNum() {return 4.0f;} B.public void getNum() {};C.public void getNum(double d) {}D.public double getNum(float d) {return 4.0d;}class A {public float getNum() {return 3.0f;}}public class B extends A {【代码】}10、下列哪个叙述是正确的?()A. 一个类最多可以实现两个接口B. 如果一个抽象类实现某个接口,那么它必须要重写接口中的全部方法C. 如果一个非抽象类实现某个接口,那么它可以只重写接口中的部分方法D. 允许接口中只有一个抽象方法二、程序填空题。