1、第 1 页 共 12 页上海大学 20152016 学年度秋季学期试卷(A 卷)课程名: 面向对象程序设计 课程号: 08305121 学分: 5 应试人声明:我保证遵守上海大学学生手册中的上海大学考场规则 ,如有考试违纪、作弊行为,愿意接受上海大学学生考试违纪、作弊行为界定及处分规定的纪律处分。应试人 应试人学号 应试人所在院系 题号 一(20) 二(20) 三(20) 四(40)得分一、判断题(每小题 2 分,共 20 分)1. 类的构造函数的函数名与类名相同,可以重载构造函数。 ()2. 类的析构函数可以被重载。 ()3. 重载运算符函数不能改变运算符的操作数个数、优先级和结合方向。 (
2、)4. 引用在声明时必须对其初始化,以绑定某个已经存在的变量(或对象) ,在该引用的生命期内,该绑定不能被更改。 ()5. 指针变量在定义时必须对其初始化,以锁定某个已经存在的目标变量(或对象) ,在该指针变量的生命期内,该指向不能被更改。 ()6. 类的非静态成员函数均有一个隐含的形式参数 this 指针常量,用于指向调用该函数的对象。函数体中不能改变该指针常量的指向(即锁定调用该函数的对象) 。 ()7. 派生类继承了基类的所有数据成员,并且在派生类的成员函数中都能直接访问基类的访问属性为 private 的成员。 ()8. 构造派生类对象时,先调用基类的构造函数,后执行派生类的构造函数。
3、析构派生类对象时,先调用基类的析构函数,后执行派生类的析构函数。 ()9. 含纯虚函数的类称为抽象类,不能创建抽象类的对象,不能定义抽象类的指针变量,不能声明抽象类的引用。 ()10. 引用返回的函数可以作左值,也避免了函数值返回时创建与返回类型相同成绩得分第 2 页 共 12 页的临时无名对象。 ()二、填空题(每空 2 分,共 20 分)如下设计了一个字符串类 String,请根据运行结果,完成程序。#include #include #include using namespace std ;class Stringpublic:String(const char *str=“)size
4、 = strlen( str );x = size0 ? new charsize : NULL;if(x=NULL) size = 0;for(int i=0; i(istream in str; / 利用 C+字符串s = String(str.c_str(); / 利用深赋值运算符return in;friend int Compare(const String for(i=0; i s2.xi ? 1 : -1;else if(i(const String friend bool operator=(const String friend bool operator=(const St
5、ring friend bool operator!=(const String protected:第 4 页 共 12 页char *x;int size;void display(const String cout #include using namespace std;class Timepublic:Time(int hour=0, int minute=0, int second=0);Time Time operator+(int);friend Time operator+(const Time friend ostream protected:int h, m, s;运行结
6、果“Hello world!“ 等于 “Hello world!“Hello world!“ 小于 “hello world!“Hello world!“ 大于 “Hello world “Hello world!“ 大于 “Hello world“ 等于 “得分第 5 页 共 12 页#endif/ MyTime.cpp 源程序文件#include “MyTime.h“Time:Time(int hour, int minute, int second): h(hour), m(minute), s(second) / 构造函数Time if(s=60) s = 0; m+; if(m=60
7、) m = 0; h+; if(h=24) h = 0;return *this;Time Time:operator+(int)Time temp(*this);+(*this);return temp;Time operator+(const Time int x = (t.h*60 + t.m)*60 + t.s + n;while(x(istream in.getline(str, 200, :);第 6 页 共 12 页t.h = atoi(str);in.getline(str, 200, :);t.m = atoi(str);in.getline(str, 200);t.s =
8、atoi(str);return in;/ main.cpp 源程序文件(测试程序)int main()Time t0(23,59,50), t;t=t0; cout t;cout using namespace std;class Test1public:Test1(int a=0);Test1(const Test1 virtual Test1();Test1 static int Num();static int Sum();friend ostream protected:static int num, sum;int x;void Show(); / 普通的 C+函数声明#endif
9、/ Test03.cpp 源程序文件#include “Test03.h“int Test1:num=0, Test1:sum=0; /静态数据成员定义及初始化Test1:Test1(int a):x(a) / 构造函数num+; sum+=x;Test1:Test1(const Test1 sum+=x;Test1:Test1()num-; sum-=x;Test1 x = t.x;return *this;int Test1:Num() return num;int Test1:Sum() return sum;ostream in temp;Test1:sum += temp - t.x
10、;第 8 页 共 12 页t.x = temp;return in;void Show() / 普通的 C+函数cout #include using namespace std;class Complexpublic:Complex(double real=0, double imag=0):re(real),im(imag)double double double Angle() const return atan2(im, re); double Abs() const return sqrt(re*re + im*im); friend Complex operator+(const
11、Complex result.re += c2.re;result.im += c2.im;return result;friend Complex operator*(const Complex result.re = c1.re*c2.re - c1.im*c2.im;result.im = c1.re*c2.im + c1.im*c2.re;return result;第 11 页 共 12 页Complex im = re*c.im + im*c.re;re = x;return *this;friend ostream return out;protected:double re, im;第 12 页 共 12 页