上海大学C++2004-2005冬_第1页
上海大学C++2004-2005冬_第2页
上海大学C++2004-2005冬_第3页
上海大学C++2004-2005冬_第4页
上海大学C++2004-2005冬_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、上海大学 2004-2005年冬季学期试卷成绩课程名:面向对象程序设计C+ 学分: 5 学号: 姓名: 院系: 一 选择1 使用标准C+库进行控制台的输入输出,要求声明:A#include B#includeusing namespace std; using namespace std;C#includeD#include#using namespace std; #define namespace std;2 写一条语句,动态分配10个double 空间的内存,地址赋给p :A. double p=new double;B. double *p=new double10;C. double

2、 p=new double(10);D. double *p=malloc( sizeof(double)*10);3 (多选)要设计一个汽车制造调度系统,正确的是:A构造Automobile类,BuildEngine类,Machine类,Work类,Name类。B构造Automobile类,Engine类,PaintMachine类,Machine类,Worker类。CAutomobile类含有Engine类型的成员变量。DPaintMachine类作为Machine类的基类。E变量MaryLeakey是Worker类的一个实例。FWorker类作为Name类的派生类。4. (多选)下面说法

3、正确的有:A. 用class进行类的定义,类的成员在默认情况下是私有的。B. C+语言的变量声明必须写在函数代码的开头地方。C.一个抽象类,不能实例化。D. 类的构造函数返回类型是voidE. 在类的成员变量是指针时,应该考虑设计一个拷贝构造函数。F. 类的静态成员函数不能访问非静态成员。5. 重载操作符从输入流中抽取数据到CMy类型的对象中正确的设计是A. istream operator( istream in, CMy obj); B. istream & operator( istream in, CMy obj); Cistream & operator( istream& in,

4、CMy obj); Distream & operator( istream &in, CMy & obj); 6. 声明一组函数,函数签名有冲突的是1)void Func( int *a) ; 2) int Func( int *p ); 3)void Func(int a,int b); 4) int Func( int &a ); A.1)、2)B.1)、3)C.2)、4)D.都有7 (多选)对以下的函数声明,合法的调用方式有。void getstr(string &buff, char term=n);Astring str; getstr(str);Bstring buff; get

5、str(&buff);Cstring str; getstr(str, t);Dchar *buff=”abc”; getstr(buff, t);8 用C+标准库连接字符串,字符串str初值”abcd”,然后连接串”efg”:A. char *str=”abcd”; str+=”efg”;B.string str=”abcd”;str+=”efg”;C. char str =”abcd”; strcat(str,”efg”);D. char str=”abcd”, str=str+”efg”;二 填空1面向对象程序设计语言的主要特征是_2C+标准模板库的名空间的名称是_3-7. 复数类代码填

6、空class Complexdouble real;double image;public:Complex()Complex(double r) _ Complex(double r,double i)_operator - (Complex t, Complex u );_ operator - (Complex t, Complex u ) /复数减实现return _8-19. 编写影片管理程序#include#includeusing namespace std;class Filmpublic:Film(string t,string d) title=t; director=d;s

7、tring title;string director;_ ;/声明数据打印函数output;void Film:output() /实现数据打印函数outputcout” title:” title” director:” directorendl;class _ /声明导演影片剪辑片类DirectorCutpublic:DirectorCut(string t,string d, string c):_ changes=s;string changes;void output( )_cout” changes:” changesendl;class _ /声明外国影片类ForeignFil

8、mpublic:ForeignFilm(string t,string d, string l): Film(t,d)_ string language;_ /声明数据打印函数outputFilm:output();cout” language:” _ select;Film *pFilm;if(select=0)pFilm =new Film(“红高粱”,”张艺谋”);else if(select=1) /创建DirectorCut对象_ DirectorCut(“xxx”,”xxxx”,”xxxxxx”); else /创建ForeignFilm对象_(“HarryPotter”,”xxx

9、x”,” English”); pFilm-output();_ pFilm; /销毁对象20-24在一个数组list中查找数据key,数组中元素的数据类型是摸板类型,设计其摸板函数。成功返回其下标,否则返回-1。template_ find( _ ) / 查找key for( _ ) if( listi = = key )return i;_;三 阅读程序1写出输出结果: _void main()int *p1=new int;int *p2=new int;if(p1=p2)cout” p1与p2相等”end;else cout” p1与p2不相等”end;2写出输出结果: _class

10、B protected: virtual void f( ) cout”B”endl; public:void g( ) f( ); ;class D : public Bprotected: virtual void f( ) cout”D”endl;void main( ) D d;d.g( ); 3写出输出结果: _ double somefunc( int x,int y) if( y=0 )throw “er:分母是0”; return x/y; void main( )try cout somefunc (2,1)endl; cout somefunc (2,0)endl; cat

11、ch( char *e) couteendl;4写出输出结果: _#include # include using namespace std;void print( int i) coutiendl;void main() vector v(5); for( int i=0; i5;i+) vi=2*i;for_each(v.begin(),v.end(),print);5. 写出输出结果: _#include using namespace std;class CBstatic int n;int a;public:CB()n+; a=1; CB()n-;int getN() return

12、 n; int getA() return a; ;int CB:n=0;void main( )CB b;CB *pb=new CB;coutgetN() getA()endl;delete pb;coutb.getN() b.getA()endl;6.写出下面程序有标号的代码行调用序列(写法举例:(1),(1),(2), (1))_7写出输出结果:_#include #include #include #include using namespace std;class CObjpublic:CObj() CObj(string type)m_type=type;virtual void

13、load(istream &in) inm_IDname; /1string name; string m_ID;string m_type;class CStudent : public CObjpublic:CStudent() : CObj(CStudent) virtual void load(istream &in);void setCourseScore(string courseID,int score) courseScorescourseID=score; map courseScores;void CStudent:load(istream &in)CObj:load(in

14、); int n; inn;for(int i=0;icourse; int score;inscore;setCourseScore(course,score);class CCourse : public CObjpublic:CCourse(): CObj(CCourse);class CManagepublic:CManage() for(map:iterator p=m_AllObj.begin();p!=m_AllObj.end(); p+)CObj* pobj=p-second; delete pobj;m_AllObj.clear();void Read(const char*

15、 filename)ifstream ifile(filename);while(ifile)string type;ifiletype;CObj *pObj=0;if(type=CStudent) pObj=new CStudent;else if(type=CCourse) pObj=new CCourse;else break;pObj-load(ifile); m_AllObjpObj-m_ID=pObj;void Report(string studentID)tryCObj* pStu=m_AllObjstudentID;CStudent* pStudent=dynamic_cas

16、t(pStu);coutname成绩表endl;map &courseScores=pStudent-courseScores;for(map:iterator p=courseScores.begin();p!=courseScores.end(); p+)CObj* pCour=m_AllObjp-first;CCourse *pCourse=dynamic_cast(pCour);coutnametsecondendl;catch(.)cout此学生不存在,或数据库出错!endl;private: map m_AllObj;void main( )CManage manage;manag

17、e.Read(data.txt); /文件data.txt有数据,见后manage.Report(020001);数据文件data.txt中有数据如下:CStudent 020001 张三 2 A001 80 A002 70 CStudent 010002 李四 3 A001 80 A002 70 A003 70CCourse A001 数学CCourse A002 物理CCourse A003 化学四对有标号的行,有错标记X,无错标记,可以修改的修改。class Unknownpublic:virtual void v(int x)=0; /1 /2 class BC : public Un

18、known /3 public:BC( ) c=1; /4 BC(int a) x=a; /5_void BC( ) /6 int & X( ) return x; /7 static void setX(int a)x=a; /8 int getX( )return this-x; /9 static void setS( int a) s=a; /10_int getS()return s; /11_virtual void v(int a) protectedFunc (a); /12_void m(int a) privateFunc(a); /13_private:int x;sta

19、tic int s;const int c;void privateFunc( int a) x=c*a; protected:void protectedFunc( int a) x=s*a; ;class DC : BC /14._ public: DC( )DC(int a) BC( a ); /15 DC(int a ) /16_virtual void v(int a) privateFunc(a); /17_void m(const char * a);void DC: m(const char * a) /18._BC:m(0); /19 protectedFunc(1); /2

20、0_int BC:s=0; /21 int main( ) Unknown un;/22_DC dc;dc.m(10); /23._dc.m(“abc”); /24._int x=dc.getX( ); /25_BC bc;bc.privateFunc(1); /26_tectedFunc(1); /27_BC:m(1); /28_Unknown *pb=new BC;pb-v(1); /29 delete pb; /30 DC *pdc 1= new BC;/31 BC *pb2=&dc; /32 pb2-m(2); /33 BC *pdc2=new DC; /34 DC *pd

21、c2= dynamic_cast(pdc2); /35 四 设计类1. 设计栈Stack模板类,基本要求是要实现Push和Pop先进后出的操作,并编一个main() 函数测试它。2. 设计一个类层次体系1)Person类,包括姓名、身份证号码。 2)CollegeStudent类,包括姓名、身份证号码、学校名称。3)Profession类,包括姓名、身份证号码、学历、收入。基本要求是提供访问其数据的成员函数,其他可任意发挥,并编一个main()函数测试。/完/2004-2005年冬季学期试卷 标准答案一。选择(每题2分,其中多选题选错不给分,少选给1分,共16分)1。A 2。B3。BCE4。A

22、CEF5。D6。A7。AC8. B二。填空(填空每空一分 ,共24分)1。封装 继承 多态2。Std3. real=r; image=0;real=r; image=r;friend Complex ComplexComplex(t. real-u. real,t. image- u.image)8-19. stringvirtual void output( );DirectorCut : public FilmFilm(t,d)Film:output();ForeignFilm: public FilmLanguage=l;void output( )LanguagepFilm =newp

23、Film =new ForeignFilmdelete 20-24class Tint T list,int n,T key int i=0;in;i+return -1;三。阅读程序 共16分1。p1与p2不相等/2分2。D/2分3.2 er:分母是0/2分4. 0 2 4 6 8/2分5. 2 1 11/2分6.1) 2) 1) 2) 1) 1) 1)/3分7.张三成绩表 数学 80物理 70/3分四对有标号的行,有错标记X,无错标记,可以修改的修改。(-0.5分X -1分(指出错误0.5分 修改0.5分)共24分)1. 2.X3. 4.X5. 6.X7. 8.X9. 10. 11. 12

24、. 13. 14.X15.X16.X17.X18. 19. 20. 21. 22.X23.X24. 25. 26.X27.X28. X29. 30. 31.X32. 33. 34. 35. 五编程题(共20分)一。(10分)#include #include using namespace std;templateclass Stack public:Stack();virtual Stack();void push(const T&e);T pop();int getlength()return top+1;private:T *elements;int top;templateStack:Stack()elements=new Tsize;top=-1;templateStack:Stack()delete elements;templatevoid Stack:push(const T&e)assert(topsize-1);elements+top=e;templateT Stack:pop()assert(top=0);return elementstop-;int _tmain(int argc, _TCHAR* argv)

温馨提示

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

评论

0/150

提交评论