高级语言程序设计(2) 下载本文

( 密 封 线 内 不 答 题 ) ………………………………………密………………………………………………封………………………………………线…………………………………… 学院 专业 座位号 华南理工大学期末考试

《高级语言程序设计(2)》试卷A

注意事项:1. 考前请将密封线内各项信息填写清楚;

2. 所有答案写在答题纸上,答在其它地方无效; 3. 试卷可做草稿纸,试卷必须与答题纸同时提交;

4.考试形式:闭卷; 5. 本试卷共五大题,满分100分,考试时间120分钟。 一.单项选择题(每题2分,共20分)

1.在C++中,有关类和对象正确说法是( A )。

A.对象是类的一个实例 B.对象是类的存储空间

C.一个类只能有一个对象 D.类是程序包,对象是存储空间 2.在类定义中,称为接口的成员是( C )。

A. 所有类成员 B. private或protected的类成员 C. public的类成员 D. public或private的类成员 3. 一个类的友员函数能够通过( D )访问该类的所有成员。

A.静态数据 B.析构造函数 C.this指针 D.类对象参数 4. 下面描述错误的是( B )。

A.自定义构造函数应该是公有成员函数 B.构造函数可以是虚函数 C.构造函数在建立对象时自动调用执行 D.构造函数可以重载 5. 在类的继承关系中,基类的( B )成员在派生类中可见。 A. 所有 B. public和protected C. 只有public D. 只有protected 6.设B类是A类的派生类,有说明语句

A a, *ap; B b, *bp; 则以下正确语句是( C )。

A. a=b; B. b=a; C. ap=&b; D. bp=&a; 7.C++中,以下( D )语法形式不属于运行时的多态。

A. 根据if语句的求值决定程序流程 B. 根据基类指针指向对象调用成员函数 C. 根据switch语句的求值决定程序流程 D. 根据参数个数、类型调用重载函数 8. 假设对A类定义一个重载“+”号运算符的成员函数,以便实现两个A类对象的加法,并返回相加结果,则该成员函数的函数原型为( B )。 A.A operator +( const A &A1, const A &A2 ); B.A A:: operator +( const A &A2 ); C.A::operator +( A &A2 ); D.A A::operator +( ); 9. 一个类模板定义了静态数据成员,则( A )。

A.每一个实例化的模板类都有一个自己的静态数据成员。 B.每一个实例化的对象都有一个自己的静态数据成员。 C.它的类型必须是类模板定义的抽象类型。 D.所有模板类的对象公享一个静态数据成员。

10.读一个C++数据文件,要创建一个( A )流对象。

A.ifstream B.ofstream C.cin D.cout

_____________ ________ 姓名 学号 二.简答题(每小题4分,共20分)

1

1.有右图所示类格。类X中有数据成员int a。根据以下函数注释的编译信息,分析int X::a的访问特性,class Y对class X和class Z对class Y的继承性质。 void Y::funY() { cout<

class X void Z::funX() { cout<

{ X x; Y y; Z z; class Y cout<

class Z cout<

}

int X::a是class X的public数据成员,class Y为protected继承class X,class Z为private继承class Y。

2.有人定义一个教师类派生一个学生类。他认为“姓名”和“性别”是教师、学生共有的属性,声明为public,“职称”和“工资”是教师特有的,声明为private。在学生类中定义特有的属性“班级”和“成绩”。所以有 class teacher { public:

char name[20]; char sex; private:

char title[20]; double salary;

}; class student : public teacher

{ private:

char grade[20] ; int score; };

你认为这样定义合适吗?请做出你认为合理的类结构定义。

class person { public:

char name[20]; char sex; };

class teacher : public person { private:

char title[20]; double salary;

}; class student : public person

{ private:

char grade[20] ; int score; };

3.有类定义 class Test { int a,b; public:

Test ( int m, int n ) { a=m; b=n; }

void Set( int m, int n ) { a=m; b=n; }

《高级语言程序设计(C++II)》试卷第 2 页 共 9 页

//…… };

有人认为“Test和Set函数的功能一样,只要定义其中一个就够了”。这种说法正确吗?为什么?

带参数的构造函数用于建立对象数据初始化,成员函数用于程序运行时修改数据成员的值。

4.若有声明

template class Tclass { /*……*/ } ; 建立一个Tclass对象用以下语句 Tclass Tobj;

有错误吗?若出错,请分析原因,并写出一个正确的说明语句。 没有实例化类属参数。

Tclass Tobj;

5.C++的文本文件可以用binary方式打开吗?若有以下语句 fstream of(\ double PI=3.1415;

请写出把PI的值写入文件\末尾的语句。 可以。

of.seekp(0,ios::end);

of.write((char*)&PI, sizeof(double));

三.阅读下列程序,写出执行结果(每题6分,共24分)

1.

#include //运算符重载 enum BoolConst { False=0 , True=1 }; //定义枚举类型 class Boolean { public:

Boolean(BoolConst x = False) { logic = x; }

void print() const { logic? cout<<\ friend Boolean operator +(const Boolean & obj1, const Boolean & obj2); friend Boolean operator *(const Boolean & obj1, const Boolean & obj2); protected: BoolConst logic; };

Boolean operator+ ( const Boolean & obj1, const Boolean & obj2 ) { return (obj1.logic||obj2.logic)?Boolean(True):Boolean(False); } Boolean operator* ( const Boolean & obj1, const Boolean & obj2 )

{ return (obj1.logic && obj2.logic) ? Boolean(True) : Boolean(False); } void main()

{ Boolean a(False), b(True), c, d ; c = a * b; d = a + b;

a.print(); b.print(); c.print(); d.print(); cout<

FLASE TRUE FALSE TRUE

《高级语言程序设计(C++II)》试卷第 3 页 共 9 页