C++程序设计试题.docx
《C++程序设计试题.docx》由会员分享,可在线阅读,更多相关《C++程序设计试题.docx(16页珍藏版)》请在冰豆网上搜索。
C++程序设计试题
C++程序设计试题
系专业班姓名学号
一、写出下列程序的执行结果:
(每小题5分,共50分)
1、
#include
classsample
{
inti;
doubled;
public:
voidsetdata(intn){i=n;}
voidsetdata(doublex){d=x;}
voiddisp()
{
cout<<”i=”<
}
};
voidmain()
{
samples;
s.setdata(10);
s.setdata(15.6);
s.disp();
}
答案:
2、
#include
double&fn(constdouble&pd)
{
staticdoublead=32;
ad+=pd;
cout<<”fnbeingcalled…thevalueis:
”<returnad;
}
voidmain()
{
doublea=345.6;
double&pa=fn(a);
cout<a=55.5;
fn(a);
cout<}
答案:
3、
#include
classsample
{
public:
sample();
sample(int);
~sample();
voiddisplay();
protected:
intx;
};
sample:
:
sample()
{
x=0;
cout<<”constructingnormally\n”;
}
sample:
:
sample(intm)
{
x=m;
cout<<”constructingwithanumber:
”<}
sample:
:
~sample()
{
cout<<”destructing\n”;
}
voidsample:
:
display()
{
cout<<”displayanumber:
”<}
voidmain()
{
sampleobj1;
sampleobj2(20);
obj1.display();
obj2.display();
}
答案:
4、
#include
classcomplex
{
public:
complex(double,double);
complex(complex&);
complex();
complexoperator+(complex&);
complex&operator=(complex&);
voiddisplay();
protected:
doublereal;
doubleimage;
};
complex:
:
complex(doublex,doubley)
{real=x,image=y;}
complex:
:
complex(complex&x)
{
cout<<”Runingcopyconstructor\n”
real=x.real;
image=x.image;
}
complex:
:
complex()
{real=image=0.0;}
complexcomplex:
:
operator+(complex&x)
{
returncomplex(real+x.real,image+x.image);
}
complex&complex:
:
operator=(complex&x)
{
cout<<”Runingassignoperator\n”;
real+=x.real;
image+=x.image;
return*this;
}
viodcomplex:
:
display()
{
cout<}
voidmain()
{
complexc1(2,5);
complexc2(c1);
complexc3;
c3=c1+c2;
c3.display();
}
答案:
5、
#include
template
classsample
{
public:
sample(){};
sample(Tx){n=x;}
sample&operator+(constsample&);
voiddisp(){cout<<”n=”<protected:
Tn;
};
template
sample&sample:
:
operator+(constsample&s)
{
staticsampletemp;
temp.n=n+s.n;
returntemp;
}
voidmain()
{
samples1(10),s2(20),s3;
s3=s1+s2;
s3.disp();
}
答案:
6、
#include
classbase
{
intn;
public:
base(inta)
{
cout<<”constructingbaseclasswithanumber=”<n=a;
}
~base()
{cout<<”destructingbaseclass”<};
classderive:
publicbase
{
intm;
public:
derive(inta,intb):
base(a)
{
cout<<”constructingderiveclasswithanumber=”<
}
~derive()
{cout<<”destructingderiveclass”<};
voidmain()
{
derives(1,2);
}
答案:
7、
#include
classvehicle
{
intwheels;
floatweight;
public:
virtualvoidmessage()
{cout<<”vehiclemessage\n”;}
};
classcar:
publicvehicle
{
intpassengers;
public:
voidmessage(){
cout<<”carmessage\n”;}
};
classtruck:
publicvehicle
{
intgoods;
public:
voidmessage(){
cout<<”truckmessage\n”;}
};
voidmain()
{
vehicleobj,*ptr;
carobj1;
truckobj2;
ptr=&obj;
prt->message();
ptr=&obj1;
ptr->message();
ptr=&obj2;
ptr->message()
}
答案:
8、
#include
voidfc()
{
try
{throw“sos”;}
catch(int)
{cout<<”sosint”<try{
throw1;}
catch(constchar*p){cout<<”sosstring”<}
voidfb()
{
int*q=newint[100];
try{fc();}
catch(…){
delete[]q;
throw;
}
}
voidfa()
{
int*p=newint[100];
try{fb();}
catch(…){
delete[]p;
throw;
}
}
voidmain()
{
try{fa();}
catch(…)
{cout<<”anerroroccurredwhilerunning”<}
答案:
9、
#include
#include
classstudentid
{
public:
studentid(intid=0)
{
value=id;
cout<<”Assigningstudentid”<}
~studentid()
{
cout<<”destructingid”<}
protected:
intvalue;
};
classstudent
{
public:
student(char*pname=”noname”,intssid=0):
id(ssid)
{
cout<<”constructingstudent”<strcpy(name,pname);
name[sizeof(name)-1]=’\0’;
}
~student()
{
cout<<”destructingstudent”<}
protected:
charname[20];
studentidid;
};
voidmain()
{
students(“randy”,9818);
}
答案:
10、
#include
#include
classsample
{
public:
sample(){cout<<”constructingobject\n”;}
~sample(){cout<<”destructingobject\n”;}
protected:
intx;
};
voidmain()
{
sample*p1,*p2;
p1=newsample;
p2=(sample*)malloc(sizeof(sample));
deletep1;
free((void*)p2);
}
答案:
二、排除下列程序的错误(每处错误3分,共30分)
1、请指出以下程序的3处错误的位置
#include
voidf1();
voidf2(intx);
voidf2(intx,inty=0);
voidf2(constint&);
voidmain()
{
f1();
f2(3,4);
f2(3);
}
voidf1(intx)
{
cout<}
voidf2(intx)
{
cout<}
voidf2(intx,inty)
{
cout<}
voidf2(constint&x)
{
cout<}
2、请指出以下程序的4处错误的位置
#include
classsample
{
public:
sample(intxx,intzz)
{
x=xx;
z=zz;
}
voiddisp(){cout<staticvoidf1()
{
cout<}
void~sample()
{cout<<”destructingobject”<protected:
intx;
staticinty=100;
constz;
};
voidmain()
{
constsamplea2(3,5);
a2.disp();
}
3、请指出以下程序的3处错误的位置
#include
classbase
{
protected:
intx;
int*p;
public:
base(intxx)
{
x=xx;
p=newint[x];
}
~base()
{delete[]p;}
};
classderive:
publicbase
{
protected:
inty;
int*p1;
public:
derive(intxx,intyy)
{
p=newint[x=xx];
y=yy;
p1=newint[yy];
}
~derive()
{
delete[]p1;
}
};
voidmain()
{
baseb1[10];
base*p1;
derive*p2;
p2=newderive(10,10);
p1=p2;
freep1;
}
三、程序设计题(20分)
下面是一个日期类的实现程序,试对以下程序增加对运算符号“<<”的重载函数,使语句行1处能够正确输出“2003年7月5日2002年6月5日”字样。
(要求不能修改类定义及类的实现部分。
)
#include
classDATE
{
protected:
intyear;
intmonth;
intday;
public:
DATE(intx=2003,inty=6,intz=5)
{
year=x;
month=y;
day=z;
}
voiddisp(ostream&oo)
{oo<}
voidmain()
{
DATEd1(2003,7,5),d2(2002,6,5);
cout<}