haihongyuan.com
海量文库 文档专家
赞助商链接
当前位置:首页 >> 数学 >>

华科面向对象期末试卷

华科面向对象期末试卷


计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

《面向对象程序设计与 JAVA 语言》试卷 (A 卷) 2010-2011 年度第一学期计算机学院 2008 级本科生 考试形式:闭卷 班级__________ 题号 题分 得分 一 20 二 10 学号________________ 姓名_____________ 三 20 四 20 五 15 六 15 总分 核对人 100

得分 评卷人

一、单项选择题(每题 2 分,共 20 分)

1. (C++) 假设 class A 的定义如下: class A { private: int i; public: A(int x= 0) { i = x ;} }; 如果 class B 从 A 派生,则类 B 必须_______________ A. 自定义带参数的构造函数 B. 自定义不带参数的构造函数 C. 带参数和不带参数的构造函数都要自定义 D. 不需要自定义构造函数

2. (C++) 对于类定义 struct A { virtual void f( ) {} = 0; void g(); }; struct B { void f() const; virtual void g(); }; 下面的叙述正确的是_______________
第 1 页 共 10 页

计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

A. A::f, A::g, B::f, B::g 都是虚函数 B. A::f, B::f, B::g 是虚函数 C. A::f, B:: g 是虚函数 D. 只有 B::g 是虚函数

3. (C++) 若 A 和 B 是二个独立的类,那么类 A 中哪种形式的数据成员一定是不允许 的___________ A. A * a; B. B & a; C. A a; D. B a;

4. (C++) 通过___________调用虚函数时,采用动态绑定。 A. 对象指针或对象引用 B. 对象名 C. 对象指针或对象引用加类名限定 D. 类名

5. (C++) 关于函数 int f(int &x), 下列说法中正确的是________ A. 调用 f 时实参可以是 int 或 int &型 B. 调用 f 时实参可以是 const int 或 const int & C. 调用 f 时实参可以是 int 或 const int 型 D. 调用 f 时实参可以是 int &或 const int &

6. (C++) 关于运算符( )的重载,下面说法正确的是________ A. 只能重载为单目运算符,不能重载为多目运算符 B. 只能重载为多目运算符,不能重载为单目运算符 C. 可以被重载为单目和多目运算符 D. 可以通过类的普通成员函数和全局函数重载

第 2 页

共 10 页

计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

7. (JAVA) 下面哪个表达式可以取得字符串 s 的最后一个字符 A. s. length ( ) C. s.charAt( s.length ( ) – 1) B. s. length( ) - 1 D. s [ s.length ( ) - 1 ]

8. (JAVA) 已知: interface I { } class A implements I { } class B extends A { } class C extends B { public static void main(String[] args) { B b = new B(); _____________ } } 在横线处添加哪条语句运行时会产生运行时异常 A. A a =b; C. C c = (C)b; B. I i = b; D. B d = (B)((A)b);

9. (JAVA) 已知: class Ex1 extends Exception {} class Ex2 extends Exception {} 如果函数 void f( )内部的代码为 { int i= new Scanner(System.in).nextInt(); if( i == 1) throw new Ex1( ); else throw new Ex2( ); }
第 3 页 共 10 页

计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

则下列函数 f 的声明正确的是____________________ A. void f( ) throws Ex1; C. void f( ) throws Exception; B. void f( )throws Ex2; D. void f( ) throw Ex1, Ex2;

10. (JAVA) 已知: String s1 = "ABC123"; String s2 = new String("ABC") + "123"; System.out.println( s1==s2 ); System.out.println( s1.equals(s2) ); 则输出结果为____________________ A.true, true B. true, false C. false, true D. false, false

得分 评卷人

二.(C++) 指出各类的成员及其存取属性(10 分)

struct A{ int a; protected: int b; public: int c; };

class C: A{ int g; protected: int h; public: A::a; int i; };

struct B: A{ int d; protected: int e; public: int f; };

class D: protected B, C{ int j; protected: int k; public: int n; };
第 4 页 共 10 页

计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

得分 评卷人

三. 阅读程序并写出输出结果(本大题分二小题,每 小题 10 分,共 20 分)

3.1. (C++ ) 指出 main 中每行输出的结果 #include <iostream> using namespace std; struct A { A( ) { cout << "A"; } }; struct B: A { A a; B( ):A( ) { cout << "B"; } }; struct C:virtual A{ C( ):A( ) { cout << "C"; } }; struct D: virtual A, C{ C c;
第 5 页 共 10 页

计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

D( ):A( ),C( ) { cout << "D"; } }; struct E: virtual B,virtual C { E( ):B( ),C( ) { cout << "E"; } }; struct F: virtual B,D,virtual E { D d; E e; F():B( ),D( ),E( ) { cout << "F";} }; int main(){ A a; cout << "\n"; B b; cout << "\n"; C c; cout << "\n"; D d; cout << "\n"; E e; cout << "\n"; F f; cout << "\n"; } 3.2 (JAVA) 指出下面程序的输出结果 public class Test { public static void main(String[] args) { A b = new B(); B c = ((B)b).B(); System.out.println(c.equals(b)); System.out.println(b.label); System.out.println(c.label); b.f1( ); ((A)c).f2( ); } static { System.out.println("Init Test Class");} } class A { A( ) { this("OK"); System.out.println("Construct A");
第 6 页 共 10 页

//输出: //输出: //输出: //输出: //输出: //输出:

计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

} A(String s){ System.out.println("Construct A:" + s); } static { System.out.println("Init A Class"); } static String label = "A"; void f1( ) {System.out.println("In A's f1()");} void f2( ) {System.out.println("In A's f2()");} } class B extends A{ B( ) { this("OK"); System.out.println("Construct B"); } B(String s){ super(s); System.out.println("Construct B:" + s); } B B( ) { System.out.println("In member function"); return this; } static { System.out.println("Init B Class"); } static String lable = "B"; void f2( ) {System.out.println("In B's f2()");} }

第 7 页

共 10 页

计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

得分 评卷人

四、 阅读程序并找出程序的语法错误并说明原因(本 大题分二小题,每小题 10 分,共 20 分)

4.1 (C++) class A { const int a = 0; protected: virtual A(int x,int y, int z) { a = x; b = y; c = z;} public: int b; static void f() {} private: int c; virtual double operator double() { return a + b;} }a(1,2,3); void A::f(){} class B:public A { public: A::c; virtual ~ B() const volatile{} private: int e; public: B(int x):e(x) {} friend int operator + (int i) {return this->d + i;} virtual void g() = 0; } b; class C { int i; public: C(int x):i(x) {} virtual operator int() { return i;} virtual C operator * (const C &c) {return C(i * c.i);} void h() {}
第 8 页 共 10 页

计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

}c(1); int main(){ int i = C(1) * 2; void (C::*pf1)( ) = &C::h; void (A::*pf2)( ) = &A::f; void (*pf2)( ) = &A::f; int C::*p = &C::i; } 4.2 (JAVA) interface I1{ void m1( ); } interface I2 { void m2( );} class A implements I2{ private int value; public A (int x){ super(x); value = x; } public void setValue(int v) { value = v;} public void getValue() {return value;} public static final int COUNT = 2; public static int f(A a){ if( a != null) return a.value; else return COUNT * value; } public void m1( ) { throw new Exception();} } class B extends A { private String s; public B(String s){ this.s = s; } public final abstract void m2() { value *= 2; } } public class Test {
第 9 页 共 10 页

计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

public static void main(String[] args) { B[] bArray = new B[10]; for(int i = bArray.length ; i >= 0; i--){ bArray[i].m1( ); } } }

得分 评卷人

五. 指出 main 变量 i 在每条赋值语句执行后的值 (15 分)

int x=3, y=x+10; struct A{ static int x; int y ; public: operator int( ){ return x + y; } A operator ++(int){ return A(x++, y++); } A(int i=::x+2, int j=::y+2):y(j){ A::x = i;} int &h(int &x); }; int &A::h(int &x) { for(int y=1; y!=1&& x<50; x+=13, y++) if(x>49) { x-=31; y-=5;} return x-=20; } int A::x=12; struct B:A{ int &z; public: B(int i,int j,int k):z(x),A(i,j){} operator int( ){ return x + y + z; } B operator ++(int){ return B(x++, y++,z++); } }; int main(){ int i, &r = i; A a(25, 3);
第 10 页 共 10 页

计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

A b; i = a.x; r = b.y; i = a + b; i = a++; B d1(4,5,6), d2 (7,8,9); r = d1 ++; i = d1 + d2; d1.h(r) = d2; return 0; }

得分 评卷人

六. 实现简单的一个大小可以动态增加的整型数据 容器类 IntegerBuffer 类,其容量增长策略为:当容

器容量已满时,将容器的容量加倍增长。请选择用 C++或 JAVA 其 中一种语言实现相应类中的函数成员,如果二者都实现,则按 C++ 实现计算得分(15 分)。
选择 1 :(C++实现) class IntegerBuffer { private: int *buffer; //存放元素 int _size; //当前元素的个数 int _capacity; //当前容量大小 public: IntegerBuffer(int capacity = 8); //构造函数,要求初始容量>=8 virtual ~IntegerBuffer(); //析构函数,要求释放内存 virtual IntegerBuffer& operator<<(int e); //容器末尾加入元素e virtual int& operator[](int index) ;//取出下标为index的元素 virtual IntegerBuffer& operator = (const IntegerBuffer &q); //要求深拷贝赋值 int size(); //返回容器当前元素个数 int capacity(); //返回容器当前容量 void resize(); //按照指定的策略调整容器的容量 void print(); //显示所有元素 };

第 11 页

共 10 页

计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

第 12 页

共 10 页

计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

第 13 页

共 10 页

计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

选择 2(JAVA 实现):要求不能使用任何 JAVA 已有的容器类 public class IntegerBuffer { private Integer[] buffer; //存放元素 private int size = 0; //当前元素的个数 private int capacity = 8; //当前容量大小,初始值为8 public IntegerBuffer(int capacity){ //构造函数,要求容量初始容量>=8

} public int getSize() { //返回容器当前元素的个数

} public int getCapacity(){//返回容器的容量

}
第 14 页 共 10 页

计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

public void resize(){

//按照指定的策略自动调整容器的容量

} public IntegerBuffer append(int e){ //向容器末尾追加元素e

} public Integer getElementAt(int index){

//取出下标为index的元素

}
第 15 页 共 10 页

计算机学院 2008 级本科《面向对象程序设计与 JAVA 语言》考试题(闭卷)

public void setElementAt(int value, int index){ //设置下标为index的元素

} //得到容器的另外一个拷贝,要实现深拷贝.要求不能使用clone方法 public IntegerBuffer copy(){

} //覆盖Object类的toString()方法, //返回的字符串要包含容器当前元素个数,容量及每个元素的值 public String toString(){

} }
第 16 页 共 10 页



推荐相关:
网站首页 | 网站地图
All rights reserved Powered by 海文库 haihongyuan.com
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@qq.com