北邮C++实验实验六Word格式文档下载.docx
《北邮C++实验实验六Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《北邮C++实验实验六Word格式文档下载.docx(22页珍藏版)》请在冰点文库上搜索。
depth=10;
cout<
<
"
Constructorcalled."
endl;
}
~cube()
Destructorcalled"
intcube:
volume()
returnheight*width*depth;
voidmain()
cubecubeone;
//定义一个对象
立方体的体积为:
cubeone.volume()<
图7-1第1题的输出示例
3.修改下列程序中的错误,并说明调用构造函数和析构函数的次序和次数
classCCounter
intvalue;
CCountr()
{
cout<
"
CCounterConstructor1"
<
endl;
value=0;
}
CCountr(intval)
CCounterConstructor2"
value=val;
~CCounter(){cout<
CCounterDestructor"
}
};
classCExample
{
CCountercar;
CExample()
CExampleConstructor1"
CExample(intval)
~CExample(){cout<
CExampleDestructor"
voidDisplay(){cout<
value="
value<
voidmain()
CExampleobj(350);
obj.Display();
先调用CExample的构造函数CExample()
然后调用CExample的构造函数CExample(intval)
然后调用CExample的析构函数~CExample()
最后调用CCounter的析构函数~CCounter()
改为
voidCCountr()
voidCCountr(intval)
4.上机调试下列程序,说明出错的原因,并提交正确的程序。
输出结果如图7-2所示。
classPoint
protected:
intx;
intGetx(){returnx;
intY;
voidinit(){x=a;
Y=b;
intGety(){returnY;
voidSetx(inta){x=a;
voidSety(intb){Y=b;
PointA,B;
A.init(25,27);
B.init(29,31);
cout<
A.x="
A.Getx<
B.x="
B.Getx()<
A.Y="
A.Y<
A.y="
A.Gety()<
B.y="
B.Y<
B.Gety()<
图7-2第4题的输出显示
出错的原因:
init定义的形参与实参个数不符
改为:
voidinit(inta,intb){x=a,Y=b;
A.init(25,27);
A.Getx()<
5.阅读以下程序,写出下列程序的运行结果,并对有注释带注释标记语句进行功能注释
classbase
private:
inti;
staticintk;
//定义一个静态成员
base(){i=0;
k++;
}//定义一个结构函数
voidDisplay();
voidbase:
Display()
k=k+10;
i++;
cout<
i="
i<
k="
k<
intbase:
k=0;
//将静态成员赋值为0
basea,b;
a.Display();
b.Display();
运行结果为:
__i=1,k=12________________
___i=1,k=22_______________
二、编程题
1.设计一个类用于对整数进行判别,并根据判断的结果分别统计所判断过的正整数和负
整数的个数,并以格式显示其统计结果。
#include<
string>
classA
private:
inta;
staticintb,c;
A(intx);
voidprint();
A:
A(intx)
a=x;
if(a>
0)
{cout<
a<
为正整数"
b++;
elseif(a<
为负整数"
c++;
else
cout<
既非正整数也非负整数"
voidA:
print()
正整数的个数是:
b<
endl<
负整数的个数是:
c<
intA:
b=0;
c=0;
Aa(3);
Ac(7);
Ad(0);
Ab(-1);
b.print();
2.编写一个程序,定义一个类,此类包括3个私有数据成员:
colorcast(彩电)、ridge(冰箱)、washer洗衣机以及total(当天总收入)。
彩电目前的价格是4200元/每台、冰箱目前的价格是2800元/每台、洗衣机的价格1500元/每台。
要求实现输入彩电、冰箱、洗衣机的价格和当天所卖出的数量,本程序将计算出百货商店家电部当天的总营业额。
classshop
intcolorcast;
intridge;
intwasher;
voidtotal();
inta,b,c,totalnumber;
voidgetprice();
voidgetnumber();
voidshop:
getprice()
请输入彩电,冰箱,洗衣机的价格:
intx,y,z;
cin>
>
x>
y>
z;
colorcast=x;
ridge=y;
washer=z;
getnumber()
{
请输入彩电,冰箱,洗衣机的个数:
a>
b>
c;
total()
家电的总营业额为a:
totalnumber=colorcast*a+ridge*b+washer*c;
totalnumber<
shopmyshop;
myshop.getprice();
myshop.getnumber();
myshop.total();
3.编写一个程序,定义一个汽车类(car),其中包括车型、颜色、车门数、座位数和轴距等属性,包括chage_parameters()和disp_parameters()等函数;
disp_parameters()显示车型、颜色、车门数、座位数和轴距属性,函数change_parameters()改变对象的车型、颜色、车门数、座位数和轴距属性,实现并测试这个类。
classcar
stringtype;
stringcolor;
intdoornumber;
intchairnumber;
intzhoucheng;
voiddisp_parameters(char*,char*,int,int,int);
voidchange_parameters(char*,char*,int,int,int);
voidcar:
disp_parameters(char*a,char*b,intc,intd,inte)
type=a;
color=b;
doornumber=c;
chairnumber=d;
zhoucheng=e;
更改前为:
车型í
type<
颜色:
color<
车门数:
doornumber<
座位数:
chairnumber<
轴距:
zhoucheng<
change_parameters(char*a,char*b,intc,intd,inte)
{type=a;
更改后为:
carmycar;
mycar.disp_parameters("
奥拓"
"
黑色?
4,4,5);
mycar.change_parameters("
奥迪"
红色"
2,2,3);
测试结果:
4.编写一个程序,使其可实现输入5个学生学号、姓名、性别和年龄,并按年龄从大到小进行排序输出。
structstu{
longno;
charname[9];
charsex[5];
intage;
{stum;
stustudent[5];
for(intb=0;
5;
b++)
{cin>
student[b].no>
student[b].name>
student[b].sex>
student[b].age;
for(inti=1;
i<
i++)
for(intj=0;
j<
=4-i;
j++)
{
if(student[j].age<
student[j+1].age)
{
m=student[j];
student[j]=student[j+1];
student[j+1]=m;
}
}
for(intk=0;
k<
k++)
student[k].no<
student[k].name<
student[k].sex<
student[k].age<
5.设计一个模拟银行ATM柜台机的程序,包括存款、取款和查询余额三种功能。
提示:
在存款、取款时都需要检查帐号和密码,可以直接引用其成员函数来检查,如果是合法客户,返回true,然后执行增加存款或减少存款的程序。
classband
staticintmoney;
staticinta,b;
intcheck()
{cout<
请输入账号和密码:
intx,y;
for(inti=1;
=3;
{cin>
y;
if(a==x,b==y)
{return1;
break;
else
{if(i!
=3){cout<
输入错误,重新输入"
;
拒绝服务"
}}
voidincrease()
请输入存款金额:
cin>
i;
money+=i;
voidreduce()
请输入取款金额:
intj;
j;
money-=j;
voidcheckmoney()
money<
intband:
a=444641;
b=12345;
money=2000;
intm=1;
bandmyband;
do
请选择服务类型:
1.存款2.取款?
3.查询余额4.结束服务"
a;
if(a==1)
if(myband.check())
{myband.increase();
elseif(a==2)
{myband.reduce();
elseif(a==3)
myband.checkmoney();
elseif(a==4)
break;
}while(m==1);
6.有一个学生类,包括学号、姓名和成绩,设计一个友员函数,比较学生成绩的高低,并求出最高分和最低分。
classstudent
intno;
stringname;
intscore;
voidget(int,char*,int);
friendvoidcompare(student&
a,student&
b,student&
c);
voidcompare(student&
c)
intx,y,m,n;
x=a.score>
b.score?
a.score:
b.score;
y=x>
c.score?
x:
c.score;
最高分为:
y<
m=a.score<
n=m<
m:
最低分为:
n<
voidstudent:
get(intx,char*y,intz)
no=x;
name=y;
score=z;
studenta,b,c;
a.get(01,"
zhang"
87);
b.get(02,"
wang"
97);
c.get(03,"
li"
65);
compare(a,b,c);