|
学习中心/函授站_
姓 名 学 号
西安电子科技大学网络与继续教育学院
2016学年上学期
《面向对象程序设计(C++)》期末考试试题
(综合大作业)
题号 一 二 三 四 五 总分
题分 10 20 20 20 30
得分
考试说明:
1、大作业于2016年4月15日下发,2016年5月7日交回;
2、考试必须独立完成,如发现抄袭、雷同均按零分计;
3、资料须手写完成,要求字迹工整、卷面干净。
一、简答题(10分)
1.1(3分)C++语言中的break语句和continue语句的作用分别是什么?
1.2(3分)什么是函数重载?实现函数重载的原则是什么?
1.3(4分)什么是this指针?它有何作用?
二、填空题(每空2分,共20分)
2.1 纯虚函数就是 的虚函数,至少包含一个纯虚函数的类称为 。
2.2 C++语言引入了异常处理机制,用 语句“抛出”异常,然后用相应的语句 _ 捕获被“抛出”的异常,并做出相应的处理。
2.3 假设x = 5,y = 0,z = 3,则表达式 !x || y++ && z 的值为 ,执行表达式后y的值为 。
2.4 下列程序在构造函数和析构函数中申请和释放类的私有成员,请完成该类的实现。
class MyClass {
private:
int *x;
public:
MyClass(int a);
~MyClass();
};
MyClass :: MyClass(int a) { ; }
MyClass :: ~MyClass() { ;}
2.5 C++语言中,运算符重载一般采用两种形式: 和 。
三、选择题(每题2分,共20分)
3.1 在下面的程序中,若实参a与形参x以引用传递的方式传递信息,实参b与形参y以值传递的方式传递信息,那么从函数compute返回主程序后,a和b的值分别为 。
Main Program void compute(x, y)
A.5和2 B.5和12 C.1和2 D.1和12
3.2 下列语句中,错误的是 。
A.int i, *ptr = &i; B.int i; int *ptr; i = *ptr;
C.int *ptr; ptr = 0; D.int i = 5; int *ptr; *ptr = &i;
3.3 下列对break语句的描述中,不正确的是 。
A.break语句可以用在循环体中,它将使执行流程跳出本层循环
B.break语句可用在switch语句中,它将使执行流程跳出当前switch语句
C.break语句可用在if语句中,它将使执行流程跳出当前if语句
D.break语句在一层循环体中可以出现多次
3.4 下列对C++中的派生类的描述中,错误的是 。
A.一个派生类可以作为另一个派生类的基类
B.派生类至少有一个基类
C.派生类的缺省继承方式是private继承
D.派生类只继承了基类的公有和保护成员
3.5 下列的各种函数中, 不是类的成员函数。
A.构造函数 B.析构函数 C.友元函数 D.拷贝构造函数
3.6 下列对静态数据成员的描述中,错误的是 。
A.说明静态数据成员时前边要加修饰符static
B.静态数据成员要在类体外进行初始化
C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符
D.静态数据成员不是所有对象所共用的
3.7 下列关于对象数组的描述中, 是错误的。
A.对象数组的下标是从0开始的 B.对象数组的数组名是一个常量指针
C.对象数组的每个元素是同一个类的对象 D.对象数组只能赋初值,而不能被赋值
3.8 下列关于私有继承的描述中,错误的是 。
A.基类的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员可以直接访问它们
B.基类的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员不能直接访问它们
C.基类的私有成员,派生类的成员和派生类的对象都无法访问
D.派生类的对象无法访问基类
3.9 应在下列程序中的空缺处填入的正确语句是 。
#include <iostream.h>
class Base {
public:
void fun() { cout << "Base::fun" << endl; }
};
class Derived : public Base {
void fun() {
; // 显式调用基类的成员函数fun()
cout << "Derived::fun" << endl;
}
};
A.fun() B.Base.fun() C.Base::fun() D.Base->fun()
3.10 下列关于类模板的描述中,不正确的是 。
A.用类模板定义一个对象时,不能省略实参 B.类模板只能有类型参数
C.类模板本身在编译中不会生成任何代码 D.类模板的成员函数都是模板函数
四、读程题(每题5分,共20分)
4.1 给出下述源程序的运行结果。
#include <iostream.h>
#include <string>
void main( ) {
char *p1, *p2, s[50] = "xyz";
p1 = "abcd";
p2 = "ABCD";
strcpy(s+2, strcat(p1+2, p2+1));
cout << s << endl;
}
4.2 给出下述源程序的运行结果。
#include <iostream.h>
class Base {
public:
void fun() { cout << "1"; }
};
class Derived : public Base {
public:
void fun() {
cout << "2" << endl;
}
};
void main() {
Derived a;
Base *p = &a;
(*p).fun();
a.fun();
}
4.3 给出下述源程序的运行结果。
#include <iostream.h>
int add(int a, int b = 5);
void main()
{ int m = 5;
cout << "sum1 = " << add(m) << endl;
cout << "sum2 = " << add(m, add(m)) << endl;
cout << "sum3 = " << add(m, add(m, add(m))) << endl;
}
int add(int x, int y)
{ return x + y; }
4.4 给出下述源程序的运行结果。
#include <iostream.h>
class A {
private:
int a, b;
public:
A(int i, int j) { a = i; b = j; }
void Move(int x, int y) { a += x; b += y; }
void Show() { cout << "( " << a << ", " << b << " )" << endl; }
};
class B : private A {
public:
B(int i, int j, int k, int l) : A(i, j) { x = k; y = l; }
void Show() { cout << x << " ," << y << endl; }
void fun() { Move(3,5); }
void f1() { A :: Show(); }
private:
int x, y;
};
void main() {
A e(1, 2);
B d(3, 4, 5, 6);
e.Show();
d.fun();
d.Show();
d.f1();
}
五、编程题(每题15分,共30分)
5.1 定义两个重载函数,分别能求矩形和圆的周长,然后在main函数中对这两个函数进行调用并测试其功能。求矩形的周长时需要输入矩形的长和宽;求圆的周长时需要输入圆的半径。
5.2 在一个程序中,类Person定义了name和age两个数据成员;由类Person派生出类Student和Teacher,其中类Student定义了学号数据,类Teacher定义了职称数据。每个类均有构造函数、析构函数和打印类中数据的函数。给出类Person、Student、Teacher的定义与实现。
|
|