C++冬.docx

上传人:b****6 文档编号:5362755 上传时间:2022-12-15 格式:DOCX 页数:11 大小:19.45KB
下载 相关 举报
C++冬.docx_第1页
第1页 / 共11页
C++冬.docx_第2页
第2页 / 共11页
C++冬.docx_第3页
第3页 / 共11页
C++冬.docx_第4页
第4页 / 共11页
C++冬.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

C++冬.docx

《C++冬.docx》由会员分享,可在线阅读,更多相关《C++冬.docx(11页珍藏版)》请在冰豆网上搜索。

C++冬.docx

C++冬

上海大学2004-2005年冬季学期试卷

成绩

课程名:

面向对象程序设计C++学分:

5

学号:

姓名:

院系:

 

一.选择

1.[]使用标准C++库进行控制台的输入输出,要求声明:

A.#includeB.#include

usingnamespacestd;usingnamespacestd;

C.#includeD.#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#includeusingnamespacestd;

voidprint(inti){cout<

voidmain()

{vectorv(5);

for(inti=0;i<5;i++)v[i]=2*i;

for_each(v.begin(),v.end(),print);

}

5.写出输出结果:

________

#includeusingnamespacestd;

classCB

{staticintn;inta;

public:

CB(){n++;a=1;}~CB(){n--;}

intgetN(){returnn;}intgetA(){returna;}

};

intCB:

:

n=0;

voidmain()

{CBb;CB*pb=newCB;

cout<getN()<<""<getA()<

deletepb;

cout<

}

6.写出下面程序有标号的代码行调用序列(写法举例:

(1),

(1),

(2),

(1))

_______________________________________________________________

7.

写出输出结果:

________________________________________________

#include#include#include#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;}

mapcourseScores;

};

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(pStu);

cout<name<<"成绩表"<

map&courseScores=pStudent->courseScores;

for(map:

:

iteratorp=courseScores.begin();p!

=courseScores.end();p++)

{CObj*pCour=m_AllObj[p->first];

CCourse*pCourse=dynamic_cast(pCour);

cout<name<<"\t"<second<

}

}catch(...)

{cout<<"此学生不存在,或数据库出错!

"<

}

private:

mapm_AllObj;

};

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(pdc2);//35

}

四.设计类

1.设计栈Stack模板类,基本要求是要实现Push和Pop先进后出的操作,并编一个main()函数测试它。

2.设计一个类层次体系1)Person类,包括姓名、身份证号码。

2)CollegeStudent类,包括姓名、身份证号码、学校名称。

3)Profession类,包括姓名、身份证号码、学历、收入。

基本要求是提供访问其数据的成员函数,其他可任意发挥,并编一个main()函数测试。

/////////////////////////////////////////////////////完/////////////////////////////////////////////////

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1