( 密 封 线 内 不 答 题 ) ………………………………………密………………………………………………封………………………………………线…………………………………… 学院 专业 座位号 华南理工大学期末考试
《高级语言程序设计(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 有错误吗?若出错,请分析原因,并写出一个正确的说明语句。 没有实例化类属参数。 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 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 页