最新天津理工大学C++实验三.docx

上传人:b****4 文档编号:26874205 上传时间:2023-06-23 格式:DOCX 页数:22 大小:195.52KB
下载 相关 举报
最新天津理工大学C++实验三.docx_第1页
第1页 / 共22页
最新天津理工大学C++实验三.docx_第2页
第2页 / 共22页
最新天津理工大学C++实验三.docx_第3页
第3页 / 共22页
最新天津理工大学C++实验三.docx_第4页
第4页 / 共22页
最新天津理工大学C++实验三.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

最新天津理工大学C++实验三.docx

《最新天津理工大学C++实验三.docx》由会员分享,可在线阅读,更多相关《最新天津理工大学C++实验三.docx(22页珍藏版)》请在冰豆网上搜索。

最新天津理工大学C++实验三.docx

最新天津理工大学C++实验三

天津理工大学

计算机科学与技术学院

 

实验报告

 

至学年第学期

 

课程名称

C++程序设计

学号

学生姓名

年级

专业

教学班号

实验地点

实验时间

年月日第节至第节

主讲教师

辅导教师

 

实验(三)

实验名称

派生与继承

软件环境

C++visual

硬件环境

实验目的

(1)理解继承的含义,掌握派生类的定义方法和实现;

(2)理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访问继承层次中的各种类成员;

(3)理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类成员可以访问基类的部分非公开的成员;

 

实验内容(应包括实验题目、实验要求、实验任务等)

1.#include

#definePI3.14159

classPoint//定义“点”类

{

intx,y;

public:

Point(inta=0,intb=0)

{x=a;y=b;}

voidShowPoint()

{cout<<"Point:

("<

intGetx()

{returnx;}

intGety()

{returny;}

voidSetxy(inta,intb)

{x=a;y=b;}

};

classCircle:

publicPoint//定义“圆”类,公有继承

{

intr;//“圆”的半径

public:

Circle(intx,inty,intra):

Point(x,y)//B

{r=ra;}

voidSetr(intra)

{r=ra;}

doubleArea()//求圆的面积

{returnPI*r*r;}

voidMove(intx_offset,inty_offset)//将圆心坐标平移

{

intx1=Getx();//存取基类的私有成员

 

inty1=Gety();//D

x1+=x_offset;y1+=y_offset;

Setxy(x1,y1);//E

}

voidShowCircle()

{

ShowPoint();//F

cout<<"Radius:

"<

cout<<"Area:

"<

}

};

voidmain()

{

Circlec(1,1,1);

c.ShowCircle();

c.Move(1,2);

c.ShowCircle();

c.Setxy(4,5);//重新置圆心坐标

c.Setr

(2);//重新置半径值

c.ShowCircle();

}

实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)

(1)记录程序的运行结果

Point(1,1)

Radius:

1Area:

3.14159

Point(2,3)

Radius:

1Area:

3.14159

Point(4,5)

Radius:

2Area:

12.5664

(2)测试能否将move函数体改写为

x=x+x_offset;

y=y+y_offset;

不可以,因为x和y是Point类的私有(private)成员。

2.#include

#definePI3.14159

classPoint

{protected:

//A

intx,y;

public:

Point(inta=0,intb=0){x=a;y=b;}

voidShowPoint()

{cout<<"Point:

("<

intGetx(){returnx;}

intGety(){returny;}

voidSetxy(inta,intb){x=a;y=b;}

};

classRadius

 

{protected:

intr;

public:

Radius(intra=0){r=ra;}

voidSetr(intra){r=ra;}

intGetr(){returnr;}

};

classCircle:

publicPoint,publicRadius

{

public:

Circle(intx,inty,intra):

Point(x,y),Radius(ra)//D

{}

doubleArea()

{returnPI*r*r;}//直接访问基类的保护成员

voidMove(intx_offset,inty_offset)

{x+=x_offset;y+=y_offset;}

voidShowCircle()

{

ShowPoint();

cout<<"Radius:

"<

cout<<"Area:

"<

}

};

voidmain()

{

Circlec(1,1,1);

c.ShowCircle();

c.Move(1,2);

c.ShowCircle();

c.Setxy(4,5);

c.Setr

(2);

c.ShowCircle();

}

(1)记录程序的运行结果

Point:

(1,1)

Radius:

1Area:

3.14159

Point:

(2,3)

Radius:

1Area:

3.14159

Point:

(4,5)

Radius:

2Area:

12.5664

(2)为什么可以直接使用x,y,

x和y是Point类的保护(protected)成员

(3)如果x,y在基类中是私有的行吗?

不行

#include

classBase1

{protected:

intdata1;

public:

Base1(inta=0)

{data1=a;

cout<<"BaseConstructor1\n";}

~Base1()

{cout<<"BaseDestructor1\n";}};

classBase2

{protected:

intdata2;

public:

Base2(inta=0)

{data2=a;

cout<<"BaseConstructor2\n";

}

~Base2()

{cout<<"BaseDestructor2\n";}

};

classDerived:

publicBase1,publicBase2

{

intd;

public:

Derived(intx,inty,intz):

Base1(x),Base2(y)

{d=z;cout<<"DerivedConstructor\n";}

~Derived()

{cout<<"DerivedDestructor\n";}

voidShow()

{cout<

};

voidmain()

{Derivedc(1,2,3);

c.Show();

}

(1)记录程序的运行结果

BaseConstructor1

BaseConstructor2

DerivedConstructor

1,2,3

DerivedDestructor

BaseDestructor2

BaseDestructor1

#include

classBase1

{

protected:

intdata1;

public:

Base1(inta=8)

{data1=a;

cout<

}

~Base1()

{cout<

};

classBase2

{

protected:

intdata2;

public:

Base2(inta=9)

{data2=a;

cout<

}

~Base2()

{cout<

};

classDerived:

publicBase1,publicBase2

{intd;

Base1b1,b2;

public:

Derived(intx,inty,intz):

Base1(x),Base2(y),b1(x+y),b2(x+z)

{d=z;cout<<"DerivedConstructor\n";}

~Derived()

{cout<<"DerivedDestructor\n";}

voidShow()

{cout<

};

voidmain()

{Derivedc(1,2,3);

c.Show();

}

(1)记录程序的运行结果

1,BaseConstructor1

2,BaseConstructor2

3,BaseConstructor1

4,BaseConstructor1

DerivedConstructor

1,2,3

DerivedDestructor

4,BaseDestructor1

3,BaseDestructor1

2,BaseDestructor2

1,BaseDestructor1

5.#include

#include

usingnamespacestd;

classbase{

protected:

floatprice;//单价

stringplace;//产地

intcount;//库存量

public:

base(float&p,int&c,string&pl)

{price=p;count=c;place=pl;}

voidin_something(intadd_cnt)

{count+=add_cnt;}

voidout_something(intdel_cnt)

{

if(del_cnt>count)count=0;//变0保护小于0的按0计算

elsecount-=del_cnt;

}

doubletotal_price()

{returnprice*count;}

intr_count()

{returncount;}

};

classshirt:

publicbase{

protected:

stringmaterial;

public:

shirt(float&p,int&c,string&pl,string&m):

base(p,c,pl)

{material=m;}

voidprint()

{

cout<<"\n衬衣"<<"\t产地:

"<

"<

<<"\n库存量:

"<

"<

}

};

classwardrobe:

publicbase{

protected:

stringwood;

stringcolor;

public:

wardrobe(float&p,int&c,string&pl,string&w,string&co):

base(p,c,pl)

{

wood=w;color=co;

}

voidprint()

{

cout<<"\n立柜"<<"\t产地:

"<

"<

"<

"

<

"<

}

};

classcap:

publicshirt{

protected:

stringstyle;

public:

cap(float&p,int&c,string&pl,string&m,string&st):

shirt(p,c,pl,m)

{

style=st;

}

voidprint()

{

cout<<"\n帽子"<<"\t产地:

"<

"<

<<"样式:

"<

"<

"

<

}

};

intchoose(stringa)//用于判断下一步执行的命令0.结束1.衬衣2.帽子3.立柜4.查询5.入库6.出库7.出错重输

{

if(a=="0")return0;//结束

elseif(a=="衬衣"||a=="shirt")return1;

elseif(a=="帽子"||a=="cap")return2;

elseif(a=="立柜"||a=="wardrobe")return3;

elseif(a=="查询"||a=="?

"||a=="about")return4;

elseif(a=="入库"||a=="+"||a=="in")return5;

elseif(a=="出库"||a=="-"||a=="out")return6;

elseif(a=="帮助"||a=="?

"||a=="help")return8;

elsereturn7;

}

inttotal_count(cap&a,shirt&b,wardrobe&c)

{returna.r_count()+b.r_count()+c.r_count();}

//PoweredbyX.Duke

intmain(void)

{

//==========输入部分

intcho=1,i;//cho为选择计数器接收choose函数的返回值通过if语句判断要执行的语句

intci=0,wi=0,si=0;//标记角标

floatpci[5]={0.00},pwi[5]={0.00},psi[5]={0.00};//单价

intcou_cap[5]={0,0,0,0,0},cou_shi[5]={0,0,0,0,0},cou_war[5]={0,0,0,0,0};//依次记录帽子衬衣立柜的库存量

stringpla_cap[5]={"0","0","0","0","0"};//保存帽子产地信息

stringpla_war[5]={"0","0","0","0","0"};//保存立柜产地信息

stringpla_shi[5]={"0","0","0","0","0"};//保存衬衣产地信息

stringcol[5]={"0","0","0","0","0"};//保存颜色信息

strings_mat[5]={"0","0","0","0","0"};//保存衬衣_布料信息

stringc_mat[5]={"0","0","0","0","0"};//保存帽子_布料信息

stringwoo[5]={"0","0","0","0","0"};//保存木料信息

stringsty[5]={"0","0","0","0","0"};//保存样式信息

stringtemp,temp1="0",temp2="0",temp3="0";//临时寄存字符

intcou_temp;floatp_temp;//临时记录初始值

intloop_sw=0;//事件标记点为0时不跳过非0时跳过

//提示性语句

cout<<"现在对3种商品\n衬衣(shirt),帽子(cap),立柜(wardrobe)\n实现基本管理功能"<

cout<<"即将录入商品名称(也可以是括号中的英文)输入0结束"<

while(cho!

=0)//分类输入

{

cout<<"输入商品名称";

cin>>temp;

cho=choose(temp);

if(cho==1){//shirt->placematerial

if(si==5){cout<<"超过最大数量输入限制,跳出";continue;}//溢出保护

cout<<"设置衬衣的单价:

";cin>>p_temp;//设置帽子单价

cout<<"输入产地布料初始数量并以空格隔开"<>temp1>>temp2>>cou_temp;

for(i=0;i<=si;i++)//用于判断是否与之前输入的有冲突

if(temp1==pla_shi[i]&&temp2==s_mat[i]){

if(p_temp!

=psi[si]){cout<<"价格冲突,输入最终价格:

";cin>>psi[si];}

cout<<"与之前输入的商品重复,将数量叠加"<

if(loop_sw==0){

psi[si]=p_temp;pla_shi[si]=temp1;s_mat[si]=temp2;cou_shi[si++]=cou_temp;}//赋值工作

cou_temp=0;//扫尾清零工作

loop_sw=0;//同上

}

if(cho==2){//cap->placematerialstyle

if(ci==5){cout<<"超过最大数量输入限制,跳出";continue;}

cout<<"设置帽子单价:

";cin>>p_temp;//

cout<<"输入产地布料样式初始数量并以空格隔开"<>temp1>>temp2>>temp3>>cou_temp;

for(i=0;i<=ci;i++)

if(temp1==pla_cap[i]&&temp2==c_mat[i]&&temp3==sty[i]){

if(p_temp!

=pci[ci]){cout<<"价格冲突,输入最终价格:

";cin>>pci[ci];}

cout<<"与之前输入的商品重复,将数量叠加"<

if(loop_sw==0){

pci[ci]=p_temp;pla_cap[ci]=temp1;c_mat[ci]=temp2;sty[ci]=temp3;cou_cap[ci++]=cou_temp;}

cou_temp=0;

loop_sw=0;

}

if(cho==3){//wardrobe->placewoodcolor

if(wi==5){cout<<"超过最大数量输入限制,跳出";continue;}

cout<<"设置立柜单价:

";cin>>p_temp;

cout<<"输入产地木料颜色初始数量并以空格隔开"<>temp1>>temp2>>temp3>>cou_temp;

for(i=0;i<=wi;i++)

if(temp1==pla_war[i]&&temp2==woo[i]&&temp3==col[i]){

if(p_temp!

=pwi[wi]){cout<<"价格冲突,输入最终价格:

";cin>>pwi[wi];}

cout<<"与之前输入的商品重复,将数量叠加"<

if(loop_sw==0){

pwi[wi]=p_temp;pla_war[wi]=temp1;woo[wi]=temp2;col[wi]=temp3;cou_war[wi++]=cou_temp;}

cou_temp=0;

loop_sw=0;

}

if(cho==7)cout<<"输入有误重新";

}

cho=1;//选择计数器重新设置

//开始初始化工作

shirts_[5]={

shirt(psi[0],cou_shi[0],pla_shi[0],s_mat[0]),

shirt(psi[1],cou_shi[1],pla_shi[1],s_mat[1]),

shirt(psi[2],cou_shi[2],pla_shi[2],s_mat[2]),

shirt(psi[3],cou_shi[3],pla_shi[3],s_mat[3]),

shirt(psi[4],cou_shi[4],pla_shi[4],s_mat[4])

};

capc_[5]={

cap(pci[0],cou_cap[0],pla_cap[0],c_mat[0],sty[0]),

cap(pci[1],cou_cap[1],pla_cap[1],c_mat[1],sty[1]),

cap(pci[2],cou_cap[2],pla_cap[2],c_mat[2],sty[2]),

cap(pci[3],cou_cap[3],pla_cap[3],c_mat[3],sty[3]),

cap(pci[4],cou_cap[4],pla_cap[4],c_mat[4],sty[4])

};

wardrobew_[5]={

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

当前位置:首页 > 高中教育 > 小学教育

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

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