上海大学级c++试题_第1页
上海大学级c++试题_第2页
上海大学级c++试题_第3页
上海大学级c++试题_第4页
上海大学级c++试题_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.2.3.得 分、判断题(每小题2分,共20分)类的构造函数的函数名与类名相同,可以重载构造函数。类的析构函数可以被重载。重载运算符函数不能改变运算符的操作数个数、优先级和结合方向。上海大学20152016学年度秋季学期试卷(A卷)课程名:面向对象程序设计 课程号:08305121学分:5应试人声明:我保证遵守上海大学学生手册中的上海大学考场规则,如有考试违纪、作弊 行为,愿意接受上海大学学生考试违纪、作弊行为界定及处分规定的纪律处分。应试人应试人学号应试人所在院系题号一 (20)二 (20)三(20)四(40)得分(X)(X)4.引用在声明时必须对其初始化,以绑定某个已经存在的变量(或对象

2、), 在该引用的生命期内,该绑定不能被更改。5. 指针变量在定义时必须对其初始化,以锁定某个已经存在的目标变量(或 对象),在该指针变量的生命期内,该指向不能被更改。6. 类的非静态成员函数均有一个隐含的形式参数this指针常量,用于指向调用该函数的对象。函数体中不能改变该指针常量的指向(即锁定调用该函数的对象)。7. 派生类继承了基类的所有数据成员,并且在派生类的成员函数中都能直接 访问基类的访问属性为private 的成员。8.构造派生类对象时,先调用基类的构造函数,后执行派生类的构造函数。析构派生类对象时,先调用基类的析构函数,后执行派生类的析构函数。9. 含纯虚函数的类称为抽象类,不能

3、创建抽象类的对象,不能定义抽象类的指针变量,不能声明抽象类的引用。10. 引用返回的函数可以作左值,也避免了函数值返回时创建与返回类型相同 的临时无名对象。得.分-#in elude二、填空题(每空2分,共20分)如下设计了一个字符串类String ,请 根据运行结果,完成程序。Hello world!大于Hello#in elude#in eludeusingn amespaee stdclass String public :String( const char *str=)size = strle n( str );x = size0 ? new char size : NULL;if

4、(x=NULL) size = 0; for (int i=0; isize; i+) xi = stri; NULL )/直接利用深赋值运算符函数Stri ng( const Stri ng &s) : x( * this = s;virtual Stri ng()if (x!=NULL) delete_x;_size = 0;String &operator =( const String &s)if (this = &s )return * thisif (x!=NULL) delete x;size = s.size;x = new char size;if (x=NULL) size

5、 = 0;for (int i=0; isize; i+)xi = s.xi;return *this char & operator ( intindex)returnxindex; friend ostream & operator (ostream &out, const Stri ng &s) for (int i=0; is.size; i+)out (istream &n, Stri ng &s)stri ng str;in str;/利用C+字符串s = Stri ng(str.c_str();/利用深赋值运算符return in;friend int Compare( cons

6、t Stri ng &s1, const Stri ng &s2) int i;for (i=0; is1.size & is2.size & s1.xi=s2.xi; i+)if (is1.size & i s2.xi ? 1 : -1;elseif (is1.size & i=s2.size)return 1;elseif (i=s1.size & is2.size)return -1;elsereturn 0;friend bool operator( const return Compare(s1, s2) 0; friend bool operator=( constretur nC

7、ompare(s1, s2) ( const return Compare(s1, s2) 0; friend bool operator=( constretur nCompare(s1, s2) = 0;friend bool operator=( constretur nCompare(s1, s2) = 0;friend bool operator!=( const return Compare(s1, s2) != 0;Stri ng & s1,con stStri ng & s2)Stri ng & s1,constStri ng &s2)Stri ng & s1,con stSt

8、ri ng & s2)Stri ng & s1,constStri ng &s2)Stri ng & s1,constStri ng &s2)Stri ng & s1,constStri ng &s2)protected :char *x;int size;void display( const String &s1, const String &s2) char *str = 小于, 等于, 大于;cout s1 str1+Compare(s1, s2) s2 t endl;int mai n() Stri ng s1(Hello world!), s2(s1); display(s1, s

9、2);运行结果Hello world!world!等于Hellos20 = h; display(s1, s2);s2 = Hello world ; display(s1, s2);Hello world!小于helloworld!s2 = Hello world; display(s1, s2); si = ;s2 =;display(s1, s2); return得分0;三、阅读程序写出运行结果(每行 1分,共20分)3.1 (10分)本题所涉及的Time类,相关头文件和源程序文件如下。/ MyTime.h头文件#ifndef #defi ne #i nclude #i nclude u

10、singMYTIME_HMYTIME_Hvioma nipnamespace std;class Timepublic :Time( int hour=0,Time & operatorTimefriendfriendfriend protectedint minu te=0,int sec on d=0);+(); operator +( int );Time operator +(const Time &t, ostream & istream &int n);operator (istream &n. Time & t);int h, m, s;#en dif/ MyTime.cpp#i

11、n cludeMyTime.hTime:Time(i nt hour, i nt minu te, int sec ond):h(hour), m(minu te), s(sec ond)源程序文件/构造函数Time & Time:s+;if (s=60)if (m=60)if (h=24)operator +()s = 0; m+; m = 0; h+; h = 0;return * this ;Time Time:operator +( intTime temp(* this );+(* this ); return temp;Time operator +(const Time &t,

12、int n) Time result(t);int x = (t.h*60 + t.m)*60 + t.s + n; while (x0)x += 24*60*60;x %= 24*60*60;result.s = x % 60;result.m = x/60 % 60;result.h = x/3600;return result;ostream & operator (ostream &out, const Time &t)out setfill(0) setw(2) t.h : setw(2)t.m : setw(2)t.s (istream &n. Time &t)char str20

13、0;in .getli ne(str, 200, :);t.h = atoi(str);in .getli ne(str, 200, :);t.m = atoi(str);in .getli ne(str, 200);t.s = atoi(str); return in;/ mai n. cpp源程序文件(测试程序)int mai n()Time t0(23,59,50), t;t=t0; cout +t en dl;t=t0; +t; cout t en dl;t=t0; +t; cout t en dl;t=t0; cout t+ en dl;t=t0; t+;cout t en dl;t

14、=t0; t+; cout t en dl;t=t0; t=t+(-3600); cout t endl;cout t;cout t en dl;cout +t en dl;cout t + (10*60+20)*60+30 endl; return 0;运行结果(3.1)23:59:5123:59:5123:59:5223:59:5023:59:5123:59:5122:59:50请输入时间:23:59:5923:59:5900:00:0010:20:303.2 (10分)以下4小题所涉及的Test1类,相关头文件和源程序文件如下/ test03.h头文件#ifndef TEST03_H#d

15、efi ne TEST03_H#in elude using namespace std; class TestiTesti( int a=0);Testi(const Testi&t);virtualTesti();Testi &operator=(conststaticint Num();staticint Sum();friendostream &operatorfriendistream &operatorprotected:staticint num, sum; publicint x;Test1 &t);(istream &in, Test1 &t);;void Show(); #

16、en dif/普通的C+函数声明/ Test03.cpp#in cludeTest03.h源程序文件int Test1: num=0, Test1:sum=0;/静态数据成员定义及初始化Test1:Test1( intnu m+; sum+=x;Test1:Test1( constnu m+; sum+=x;Test1:Test1()nu m-; sum-=x;Test1 & Test1:sum += t.x - x;x = t.x;return * thisint Test1:Num() int Test1:Sum() ostream & operatora):x(a)Testi & t):

17、x(t.x)operator =( constreturnnu m;return sum; (ostream &out,Testi &t)/构造函数/拷贝构造函数/赋值运算符函数const Testi &t)out (istream &n, Testi &t)int temp;in temp;Test1:sum += temp - t.x;t.x = temp;return in;void Show()/ 普通的C+函数cout Num = Test1:Num() ,tSum = Test1:Sum() endl;/ 3.2.1测试程序之一#in eludeTest03.h运行结果(3.2.1

18、)Num = 0 , Sum = 0intmai n()Show();return 0;/ 3.2.2测试程序之二#in eludeTest03.hTesti x(100);/创建一个全局对象void f(Test1 t) Show();运行结果(3.2.2)Num = _1_,_ Sum = 100 Num = 2 , Sum = 200Num = 1 , Sum = 100intmai n()Show();f(x);Show();return 0;/ 3.2.3测试程序之三#in eludeTest03.hvoid f(Test1 &t)Show();intmai n()运行结果(3.2.

19、3)Num = 1 , Sum = 100 Num = 1 , Sum = 100Num = 1 , Sum = 100Testi x(100);/ 创建一个自动对象Show();f(x);Show();return 0;/ 3.2.4测试程序之四#in eludeTest03.hintmai n()Testi x(10),y(20),a2=x,y Show();Testi *p = new Testi; *p = 30;Show();deleteShow();return运行结果(324)Num = 4 ,Num = 5 ,Num = 4 ,P;0;Sum = 60Sum = 90Sum =

20、 60得-分四、(40分)设计复数类要求运行时得到指定的输出结果。实现如下测试程序中用到的9个函数(每个函数3分。无须定义拷贝构造函数、析构 函数及赋值运算符函数);自选3个运算符,并实现运算符函数重载(每个函数 3分数据成员、类设计的其他部分(注意复数不能比较大小);【注意:数学函数double atan2(4分)。double y, doublex);当xM0时返回y/x的反正切值,当x=0时返回n2或-n2#in clude Complex.h int (正负号与y同号)】。mai n()Complex x(3,4), y(x),乙cout x , y , z en dl; cout x

21、.Abs() t;z.Real() = z.Im ag() = 1;cout z.A ngle()*180/M_PI endl;cout x+z t;cout x*z t;cout (x*=x) en dl;return 0;/复数的算术运算:+、/创建对象/输出复数计算复数的模长设置复数的实部、虚部计算复数的角度*,迭代赋值*/ Complex.h#in clude #in clude 运行结果(4.1)(3, 4), (3, 4), (0, 0)545(4, 5)(-1, 7)(-7, 24)using n amespace std;class Complexpublic:Complex(double real=0, double i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论