当前位置:文档之家› 中山大学期末考试试题样题

中山大学期末考试试题样题

中山大学期末考试试题样题课程:C++程序设计语言 学号: 考试对象:网络教育计算机本科 姓名: 成绩:一、选择题 (每小题 2 分,共 30 分) 1 A 2 B 3 B 4 C 5 C 6 D 7 D 8 C 9 A 10 D 11 B 12 D 13 A 14 D 15 D题号 答案1. 假定一个类的构造函数为 A ( int aa, int bb) { a = aa; b = bb; },则执行 A x(4,5);语法 后,x.a 和 x.b 的值分别为( ) 。

A.4 和 5 B.5 和 4 C.4 和 20 D.20 和 5 2. 假定 AB 为一个类,则执行 AB x;语句时将自动调用该类的( ) 。

A.有参构造函数 B.无参构造函数 C.拷贝构造函数 D.赋值重载函数 3. C++语言建立类族是通过( ) 。

A.类的嵌套 B.类的继承C.虚函数D.抽象类4. 执行语句序列 ofstream outf("SALARY.DAT");if (…) cout<<"成功!"; else cout<<"失败!"; 后,如果文件打开成功,显示"成功!",否则显示"失败!"。

由此可知,上面 if 语 句的处的表达式是( ) 。

A. !outf 或者 outf.fail() B. !outf 或者 outf.good() C.outf 或者 outf.good() D.outf 或者 ouf.fail() 5. 静态成员函数不能说明为( ) 。

A.整型函数 B.浮点函数C.虚函数D.字符型函数6. 在 C++中,数据封装要解决的问题是( ) 。

A.数据规范化排列 B.数据高速转换 C.避免数据丢失 D.切断了不同模块之间的数据的非法使用 8. 如果 class 类中的所有成员在定义时都没有使用关键字 public、private 或 protected, 则所有成员缺省定义为( ) 。

A.public B.protected C.private D.static 9. 设置虚基类的目的是( ) 。

A.消除两义性 B.简化程序 C.提高运行效率 D.减少目标代码110. 关于内联成员函数,以下说法错误的是: ) ( 。

A. 为了提高运行时的效率,对于较简单的函数可以声明为内联形式。

B. 内联函数体中不要有复杂结构(如循环语句和 switch 语句) 。

C. 将函数体放在类的声明中或使用 inline 关键字可声明内联成员函数。

D. 内联函数的声明可以不必出现在内联函数第一次被调用之前。

11. 关于构造函数,以下说法错误的是: ) ( 。

A. 构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象 初始化为一个特定的状态。

在对象创建时由系统自动调用。

B. 基类的构造函数可以被派生类所继承。

C. 如果程序中未声明,则系统自动产生出一个缺省形式的构造函数。

D. 允许为内联函数、重载函数、带缺省形参值的函数。

12. 关于析构函数,以下说法错误的是: ) ( 。

A. 完成对象被删除前的一些清理工作。

B. 在对象的生存期结束时系统自动调用它,再释放此对象所属的空间。

C. 如果程序中未声明析构函数,编译器将自动产生一个缺省的析构函数。

D. 析构函数可以带一个或多个参数。

13. 关于 C++ 标识符的作用域与可见性,以下说法错误的是: ) ( 。

A. 在同一作用域中,可以声明同名的标识符。

B. 块作用域中声明的对象是动态生存期的对象 (习惯称局部生存期对象) 在 。

文件作用域中声明的对象具有静态生存期。

C. 如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该 标识符在内层可见。

D. 对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名 的标识符,则外层作用域的标识符在内层不可见。

14. 关于 C++ 的友元与友元函数,以下说法错误的是: ) ( 。

A. 友元是 C++提供的一种破坏数据封装和数据隐藏的机制。

可以使用友元函 数和友元类。

为确保数据的完整性及封装,应尽量不用或少用友元。

B. 友元函数是在类声明中说明的非成员函数,在它的函数体中能够通过对象 名访问 private 和 protected 成员。

C. 通过将一个模块声明为另一个模块的友元,一个模块能够引用到另一个模 块中本是被隐藏的信息。

D. 友元函数访问对象中的成员不必通过对象名。

15. 关于 C++ 的运算符重载,以下说法错误的是: ) ( 。

A. 只能重载 C++ 语言中已有的运算符,不可臆造新的。

B. 可以重载为类成员函数。

也可以重载为友元函数。

C. 经重载的运算符,其操作数中至少应该有一个是自定义类型。

D. 可以改变原运算符的优先级和结合性。

也可以改变操作数个数。

2二、 填空题(每小题2分,共20 分)1. 执行完 C++程序中的三条语句:int a,b,*c=&a; int * &p = c; p = &b; 后 c 指向_____b___________。

2. 函数定义 int Fn2 ( ) { int *p; *p = 9; cout<< * p; return 0;} , 存在的问题是:并没有给指针 p 赋任何有效地址值。

3. 已知'A'~'Z'的 ASCII 码为 65~90, 当执行" char ch = 14*5+2; cout<<ch<<endl;" 语 句序列后, 得到的输出结果为_H__. 4.. 类 A 与类 B 都有 public 数据成员 f, 类 C 公有继承 A 和 B, 类 C 有 public 数据 成员 f,类 D 保护继承 C, d 是类 D 的一个对象, 从 d 访问类 A 的成员 f 的 表达式是:d.A::f,从 d 访问类 C 的成员 f 的表达式是:d.C::f。

5. C ++ 将抽象出的数据成员、代码成员结合为一个整体的过程, 称为_封装_。

6. 拷贝构造函数是一种特殊的构造函数,其形参为本类的对象引用。

当用类的一 个对象去初始化该类的另一个对象时系统自动调用它实现赋值。

7. _虚基类____主要用来解决多继承时可能发生的对同一基类继承多次而产生 的二义性问题,为最远派生类提供唯一的基类成员,而不重复产生多次拷贝。

8. 异常处理中, 当找到一个匹配的异常处理后, 将从对应的关键字__try______ 开 始到异常被抛掷处之间构造且尚未析构的所有自动对象进行析构。

9. 在类定义中,类说明以关键字 class 开始,其后跟__类名,它必须是一个有效的 C++标识符。

三、 阅读程序(每小题 4 分,共 20 分) 。

1. 给出下列程序运行后的输出结果. #include <iostream.h> void WF(int x, int y) { x = x+y; y = x+y; cout<<"subs:"<<"x,y="<<x<<","<<y<<endl; } void main() { int x = 8, y = 15; cout<<"main:"<<"x,y="<<x<<","<<y<<endl; WF(x, y); x = 2*x; cout<<"main:"<<"x,y="<<x<<","<<y<<endl; WF(x, y); cout<<"main:"<<"x,y="<<x<<","<<y<<endl; } answer: main: x, y=8, 15 subs: x, y=23, 38 main: x, y=16, 15 subs: x, y=31, 46 main: x, y=16, 1532.指出下面程序中的错误,并改正。

#include <iostream.h> class Test { private: static int x; public: virtual static int func(); }; int Test::x = 20; int Test::func() { return x; } void main() { cout<<Test::func()<<endl; Test a; cout<<a.func(); } answer: virtual static int func(), virtual 的作用是使该函数可以在不同的类中具体使用的时候再定义和使用。

Static 是使类的所有对象成员共同维护同一个数据成员。

3.补充完整下面的程序。

class Location { private: int X, Y; public: void init( int initX, int initY); int GetX(); int GetY(); }; void Location::init (int initX, int initY) {X = initX; Y = initY;} int Location::GetX() {return X;} int Location::GetY() {return Y;} #include <iostream.h> void main() { Location A1; // 定义一个指向 A1 的指针 pA1; Location *pAl=&Al; pAl->init( 6, 8 ); // 用 pA1 将对象 A1 成员 X 和 Y 分别初始化为 6 和 8 }44.在下面程序的横线处填上适当字句,使该程序执行结果为 6。

#include <iostream.h> class base { int X; public:void init (_int x ) { X=x; } // 为 X 置值 // 取 X 值 int Getnum ( )_{ return X; }}; void main() base test; test.init(6); cout<<test.Getnum(); } 5.指出下面程序重点错误,在错误处说明出错原因 。

相关主题