C++冬.docx
- 文档编号:5362755
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:11
- 大小:19.45KB
C++冬.docx
《C++冬.docx》由会员分享,可在线阅读,更多相关《C++冬.docx(11页珍藏版)》请在冰豆网上搜索。
C++冬
上海大学2004-2005年冬季学期试卷
成绩
课程名:
面向对象程序设计C++学分:
5
学号:
姓名:
院系:
一.选择
1.[]使用标准C++库进行控制台的输入输出,要求声明:
A.#include
usingnamespacestd;usingnamespacestd;
C.#include
#usingnamespacestd;#definenamespacestd;
2.[]写一条语句,动态分配10个double空间的内存,地址赋给p:
A.doublep=newdouble;B.double*p=newdouble[10];
C.doublep=newdouble(10);D.double*p=malloc(sizeof(double)*10);
3.[](多选)要设计一个汽车制造调度系统,正确的是:
A.构造Automobile类,BuildEngine类,Machine类,Work类,Name类。
B.构造Automobile类,Engine类,PaintMachine类,Machine类,Worker类。
C.Automobile类含有Engine类型的成员变量。
D.PaintMachine类作为Machine类的基类。
E.变量MaryLeakey是Worker类的一个实例。
F.Worker类作为Name类的派生类。
4.[](多选)下面说法正确的有:
A.用class进行类的定义,类的成员在默认情况下是私有的。
B.C++语言的变量声明必须写在函数代码的开头地方。
C.一个抽象类,不能实例化。
D.类的构造函数返回类型是void
E.在类的成员变量是指针时,应该考虑设计一个拷贝构造函数。
F.类的静态成员函数不能访问非静态成员。
5.[]重载操作符>>从输入流中抽取数据到CMy类型的对象中正确的设计是
A.istreamoperator>>(istreamin,CMyobj);
B.istream&operator>>(istreamin,CMyobj);
C.istream&operator>>(istream&in,CMyobj);
D.istream&operator>>(istream&in,CMy&obj);
6.[]声明一组函数,函数签名有冲突的是
1)voidFunc(int*a);2)intFunc(int*p);
3)voidFunc(inta,intb);4)intFunc(int&a);
A.1)、2)B.1)、3)C.2)、4)D.都有
7.[](多选)对以下的函数声明,合法的调用方式有。
voidgetstr(string&buff,charterm=’\n’);
A.stringstr;getstr(str);B.stringbuff;getstr(&buff);
C.stringstr;getstr(str,‘\t’);D.char*buff=”abc”;getstr(buff,‘\t’);
8.[]用C++标准库连接字符串,字符串str初值”abcd”,然后连接串”efg”:
A.char*str=”abcd”;str+=”efg”;B.stringstr=”abcd”;str+=”efg”;
C.charstr[]=”abcd”;strcat(str,”efg”);D.charstr=”abcd”,str=str+”efg”;
二.填空
1.面向对象程序设计语言的主要特征是______________________________
2.C++标准模板库的名空间的名称是___________
3-7.复数类代码填空
classComplex
{doublereal;doubleimage;
public:
Complex(){}
Complex(doubler){_________________________}
Complex(doubler,doublei){____________________________}
___________________operator-(Complext,Complexu);
};
______________________operator-(Complext,Complexu)
{//复数减实现
return_________________________________________________
}
8-19.编写影片管理程序
#include
#include<___________>
usingnamespacestd;
classFilm
{
public:
Film(stringt,stringd){title=t;director=d;}
stringtitle;stringdirector;
_____________________________;//声明数据打印函数output
};
voidFilm:
:
output()//实现数据打印函数output
{cout<<”title:
”<
”< } class____________________________//声明导演影片剪辑片类DirectorCut { public: DirectorCut(stringt,stringd,stringc): ____________{changes=s;} stringchanges; voidoutput() {_______________________________ cout<<”changes: ”< } }; class______________________________//声明外国影片类ForeignFilm { public: ForeignFilm(stringt,stringd,stringl): Film(t,d){____________} stringlanguage; ______________________//声明数据打印函数output {Film: : output(); cout<<”language: ”<<_________________< } }; voidmain() {intselect;cin>>select; Film*pFilm; if(select==0) pFilm=newFilm(“红高粱”,”张艺谋”); elseif(select==1)//创建DirectorCut对象 __________DirectorCut(“xxx”,”xxxx”,”xxxxxx”); else//创建ForeignFilm对象 ____________________(“HarryPotter”,”xxxx”,”English”); pFilm->output(); ____________pFilm;//销毁对象 } 20-24在一个数组list中查找数据key,数组中元素的数据类型是摸板类型,设计其摸板函数。 成功返回其下标,否则返回-1。 template<_____________> ______find(___________________________)//查找key { for(__________________________) if(list[i]==key) returni; ______________; } 三.阅读程序 1.写出输出结果: ________ voidmain() {int*p1=newint;int*p2=newint; if(p1==p2) cout<<”p1与p2相等”< else cout<<”p1与p2不相等”< } 2.写出输出结果: ________ classB {protected: virtualvoidf(){cout<<”B”< public: voidg(){f();} }; classD: publicB {protected: virtualvoidf(){cout<<”D”< }; voidmain() {Dd;d.g();} 3.写出输出结果: ________ doublesomefunc(intx,inty){if(y==0)throw“er: 分母是0”;returnx/y;} voidmain() { try{cout< catch(char*e) {cout< } 4.写出输出结果: ________ #include voidprint(inti){cout< voidmain() {vector for(inti=0;i<5;i++)v[i]=2*i; for_each(v.begin(),v.end(),print); } 5.写出输出结果: ________ #include classCB {staticintn;inta; public: CB(){n++;a=1;}~CB(){n--;} intgetN(){returnn;}intgetA(){returna;} }; intCB: : n=0; voidmain() {CBb;CB*pb=newCB; cout< deletepb; cout< } 6.写出下面程序有标号的代码行调用序列(写法举例: (1), (1), (2), (1)) _______________________________________________________________ 7. 写出输出结果: ________________________________________________ #include usingnamespacestd; classCObj {public: CObj(){}CObj(stringtype){m_type=type;} virtualvoidload(istream&in) {in>>m_ID>>name;}//1 stringname;stringm_ID;stringm_type; }; classCStudent: publicCObj {public: CStudent(): CObj("CStudent"){} virtualvoidload(istream&in); voidsetCourseScore(stringcourseID,intscore) {courseScores[courseID]=score;} map }; voidCStudent: : load(istream&in) {CObj: : load(in); intn;in>>n; for(inti=0;i {stringcourse;in>>course;intscore;in>>score; setCourseScore(course,score); } } classCCourse: publicCObj {public: CCourse(): CObj("CCourse"){} }; classCManage {public: ~CManage() {for(map : iteratorp=m_AllObj.begin();p! =m_AllObj.end();p++) {CObj*pobj=p->second;deletepobj;} m_AllObj.clear(); } voidRead(constchar*filename) {ifstreamifile(filename); while(ifile) {stringtype;ifile>>type; CObj*pObj=0; if(type=="CStudent")pObj=newCStudent; elseif(type=="CCourse")pObj=newCCourse; elsebreak; pObj->load(ifile);m_AllObj[pObj->m_ID]=pObj; } } voidReport(stringstudentID) {try{CObj*pStu=m_AllObj[studentID]; CStudent*pStudent=dynamic_cast cout< map for(map : iteratorp=courseScores.begin();p! =courseScores.end();p++) {CObj*pCour=m_AllObj[p->first]; CCourse*pCourse=dynamic_cast cout< } }catch(...) {cout<<"此学生不存在,或数据库出错! "< } private: map }; voidmain() {CManagemanage; manage.Read("data.txt");//文件data.txt有数据,见后 manage.Report("020001"); } 数据文件data.txt中有数据如下: CStudent020001张三2A00180A00270 CStudent010002李四3A00180A00270A00370 CCourseA001数学 CCourseA002物理 CCourseA003化学 四.对有标号的行,有错标记X,无错标记√,可以修改的修改。 classUnknown {public: virtualvoidv(intx)=0;//1 }//2 classBC: publicUnknown//3 {public: BC(){c=1;}//4 BC(inta){x=a;}//5_________________ void~BC(){}//6 int&X() {returnx;}//7 staticvoidsetX(inta) {x=a;}//8 intgetX() {returnthis->x;}//9 staticvoidsetS(inta) {s=a;}//10________________________ intgetS() {returns;}//11____________________ virtualvoidv(inta) {protectedFunc(a);}//12_______________________ voidm(inta) {privateFunc(a);}//13____________________ private: intx;staticints;constintc; voidprivateFunc(inta){x=c*a;} protected: voidprotectedFunc(inta){x=s*a;} }; classDC: BC//14.___________________ {public: DC(){} DC(inta){BC(a);}//15 ~DC(inta){}//16______________________ virtualvoidv(inta) {privateFunc(a);}//17_________________ voidm(constchar*a); }; voidDC: : m(constchar*a)//18._____________________ {BC: : m(0);//19 protectedFunc (1);//20_________________________________ } intBC: : s=0;//21 intmain() {Unknownun;//22__________________ DCdc; dc.m(10);//23.___________________ dc.m(“abc”);//24.__________________ intx=dc.getX();//25______________ BCbc; bc.privateFunc (1);//26_____________________ bc.protectedFunc (1);//27______________________ BC: : m (1);//28______________ Unknown*pb=newBC; pb->v (1);//29 deletepb;//30 DC*pdc1=newBC;//31 BC*pb2=&dc;//32 pb2->m (2);//33 BC*pdc2=newDC;//34 DC*pdc2=dynamic_cast } 四.设计类 1.设计栈Stack模板类,基本要求是要实现Push和Pop先进后出的操作,并编一个main()函数测试它。 2.设计一个类层次体系1)Person类,包括姓名、身份证号码。 2)CollegeStudent类,包括姓名、身份证号码、学校名称。 3)Profession类,包括姓名、身份证号码、学历、收入。 基本要求是提供访问其数据的成员函数,其他可任意发挥,并编一个main()函数测试。 /////////////////////////////////////////////////////完/////////////////////////////////////////////////
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+