搜索
您的当前位置:首页正文

南昌大学面向对象程序设计第 一学期期末考试试卷

来源:六九路网
南昌大学面向对象程序设计第 一学期期末考试试卷

课程名称: 面向对象程序设计 适用班级:本科2002级

姓名: 学号: 班级: 专业: 计算机应用技术

学院: 信息工程学院 系别:计算机科学与技术系 考试日期:2005.1.10 一、 选择题(每题2分,共20分)

得分 评阅人 1、在下面的函数声明中,存在着语法错误的是______。 A.void BC(int a,int) B.void BD(int,int) C.void BE(int,int=5) D.int BF(int x, int y)

2、假定AB为一个类,则执行“AB a(4),b[3],*p[2];”语句时,自动调用该类构造函数的次数为_______。 A.3 B.4 C.6 D.9

3、下列各类函数中,( )不是类的成员函数

A. 构造函数 B.析构函数 C. 友元函数 D. 拷贝构造函数 4、关于new运算符的下列描述中,( )是错的 A. 可以用来动态创建对象和对象数组

B. 使用它创建的对象或对象数组可以使用delete运算符删除 C. 使用它创建对象时要调用构造函数 D. 使用它创建对象数组时必须制定初始值 5、下列类声明程序段正确的是( ) A.

class figure { public: }; B. class line { public:

int is_on_line(int x, int y); figure();

~figure(int have_drawn);

private:

int start_x = 0, start_y =0;

}; C.

class rectangle { public: int draw();

int is_in_rectangle(int x, int y);

private: int upper_left_x, upper_left_y, lower_right_x, lower_right_y;

}; D.

class square { public:

void square(int x = 0,int y = 1,int len = 0); ~square();

int draw(); private: };

6、分析下列程序段,以下几种说法中正确的是() class A { }; class B { };

class C: public A,public B

public:

virtual void f(); virtual void g(); public:

virtual void f();

int upper_left_x, upper_left_y, side_length;

{ };

假设有指针pa、pb和pc说明如下:

A* pa;B* pb;C* pc;C c;pa = &c; pb = &c; pc = &c; pa->f();pb->f();pc->f();

A.pa->f();pb->f();pc->f();都将实际调用C中的f(); B.pa->f();pb->f();pc->f();都将实际调用A中的f();

C.pa->f();pb->f();pc->f();分别实际调用A::f()、B::f()、C::f() D.pa->f();pb->f();pc->f();分别实际调用C::f()、B::f()、A::f() 7、下列的( )是引用调用

A. 形参是指针,实参是地址值 B. 形参和实参都是变量 C. 形参是数组名,实参是数组名 D. 形参是引用,实参是变量 8、下述静态数据成员的特性中,( )是错误的 A. 说明静态数据成员时前面要加修饰符static B. 静态数据成员要在类体外进行初始化

C. 引用静态数据成员时,要在静态数据成员名前加〈类名〉和作用域运算符

public:

void f();

D. 静态数据成员不是所有对象所共用的 9、下列运算符中,( )运算符不能重载 A. && B. [ ] C. ? : D. = 10、关于动态绑定的下列描述中,( )是错误的 A. 动态绑定是以虚函数为基础的

B. 动态绑定是在运行时确定所调用的函数代码的 C. 动态绑定调用函数的操作是指向对象的指针或对象引用 D. 动态绑定是在编译时确定操作函数的

二、判断题(每题2分,共20 分)

得分 评阅人 1、( )函数的参数个数和类型都相同,只是返回值类型不同,这不是重载函数

2、( )对象数组只能赋初值,而不能被赋值 3、( )抽象类是没有说明对象的类

4、( )在公有继承中,基类中只有公有成员对派生类对象是可见的 5、( )构造函数和析构函数都不能重载

6、( )带有虛基类的多层派生类构造函数的成员初始化列表中都要列出虛基类的构造函数,这样将对虛基类的子对象初始化多次

7、( )当将一个类S定义为另一个类A的友元类时,类S的所有成员函数都可以直接访问类A的所有成员。

8、( )构造函数可以被继承,析构函数不能被继承 9、( )C++中允许一个基类既是直接基类又是间接基类

10、( )一个类属类可以作为一个普通类的派生类,也可以作为其他类属类的基类

三、 写出以下各程序的运行结果(每题5分,共20分)

得分 评阅人 1、

#include class FOO {

public:

FOO( int i)

{ cout<<“constructing.\\n”; = i;}

FOO(const FOO& other )

pointer = new int;

*pointer

{ cout<<“copy constructing.\\n”; pointer = new int; *pointer = *other.pointer;}

~FOO( )

{ cout<<“destructing.\\n”; delete pointer;} int get(){ return *pointer;} private:

int* pointer;

};

void display(FOO obj ) { cout<2、#include

FOO obj1(15); FOO obj2 = obj1; display(obj2);

class Sample {

int n;

static int sum; public:

Sample(int x){n = x;} void add(){sum += n;}

void disp(){ cout<<\"n=\"<int Sample::sum=0; void main() {

Sample a(2), b(3), c(5); a.add(); a.disp(); b.add(); b.disp(); c.add(); c.disp(); } 3、

#include class A

{ };

class B: public A { };

class C: public B { }

public:

C(){}

virtual void f(){cout<<“C::f() called.\\n”;} public:

B(){f();} void g(){f();} public:

A(){}

virtual void f(){cout<<“A::f() called.\\n”;}

void main() { C c; c.g();

}

4、

#include class A { public:

A(char *s) { cout << s << endl; } ~A() {} };

class B:public A { public:

B(char *sl,char *s2) : A(sl)

{ cout << s2 << endl; };

class C:public A { public:

C(char *sl,char *s2) : A(sl)

} { cout << s2 << endl; } };

class D:public B,public C { public:

D(char *sl,char *s2,char *s3,char *s4) : B(sl,s2), C(sl,s3) { cout << s4 << endl; } void main () {

D d(\"class A\}

四、程序分析题(每题5分,共20分)

得分 评阅人 1、

#include void main() { }

修改该程序(但不允许对main()作任何修改),使该程序能输出:

cout<<“This is a c++ program!\\n”;

Hello,everyone! This is a c++ program! Goodbye!

2、请修改以下程序的错误,使得程序可以连续五次输出字符串string #include void main() {

char string[30] = “Nanchang University\\n”; char* ptr = string;

for(int loop = 0; loop<= 4; loop+1) {

while (*ptr) { } }

cout<<*ptr; ptr = ptr + 1;

} 3、

#include class A {

public:

void set(int a,int b){m = a; n =b;} void show(){cout<protected: };

class B:public A {

int s; int m,n;

public:

void sets(){s = m*n;} void shows(){cout<}

void main() { }

在这个程序中,类B的函数sets()能否访问类A中的变量m和n?为什么?如果在类A中把m和n定义为私有成员,上面的程序能否通过编译,为什么? 4、

# include template Type WD(Type a[], int n) {

Type m= a[0] ; for(int i=l;iB obj; obj.set(2,3); obj.show(); obj.sets(); obj.shows();

if(a[i]>m) m = a[i];

return m; }

请说出这是什么函数及它的功能。

五、 程序设计题(每题10分,共20分)

得分 评阅人 1、 设计一个平面几何中的位置类position,要求该类提供移动,求到另一点距离(包括到原点距离),求x坐标,求y坐标,输出坐标值的操作,并演示该类提供的各种操作。

2、 下列shape类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数。请从shape类派生三角形类(triangle)、矩形类(rectangle)、并给出具体的求面积函数。 class shape { public:

virtual float area( )=0 };

float total(shape *s[ ],int n)

{

float sum=0.0; for(int i=0;iarea( ); return sum; }

因篇幅问题不能全部显示,请点此查看更多更全内容

Top