C++程序设计实验四类的继承与派生.docx
《C++程序设计实验四类的继承与派生.docx》由会员分享,可在线阅读,更多相关《C++程序设计实验四类的继承与派生.docx(14页珍藏版)》请在冰豆网上搜索。
![C++程序设计实验四类的继承与派生.docx](https://file1.bdocx.com/fileroot1/2023-1/25/d6db6c44-111e-4dfd-9a4e-a3508aa5b6ea/d6db6c44-111e-4dfd-9a4e-a3508aa5b6ea1.gif)
C++程序设计实验四类的继承与派生
成绩
批阅
日期
台州学院
电子与信息工程学院实验报告
班级学号姓名吴前斌
同组
实验课程:
C++程序设计
实验项目:
类的继承与派生
实验日期:
2019年5月5日
7、定义形状类,其中基类为点类,圆类继承点类,圆柱体类继承圆类,计算面积、体积。
9、建立一个建筑物类的层次体系。
其中,基类building包括保护数据成员name(建筑物名称)、floors(层数)和areas(总面积),由building类派生住宅类house和办公楼类office;住宅类house包括私有数据成员rooms(房间数)和balcony(阳台数);办公楼类office包括私有数据成员offices(办公室数)和meetingrooms(会议室数)。
住宅类house和办公楼类office都含有构造函数和print函数,以分别用于对数据成员的初始化和输出。
在主函数中,实例化house类和office类对象并且将其数据输出。
10、某校每位学生都要学习英语、语文、数学三门公共课程以及不同的专业课程。
会计学专业要学习会计学和经济学两门课程,化学专业要学习有机化学和化学分析两门课程。
编程序管理学生成绩,计算公共课的总分和平均分,以及所有课程的总成绩。
数据记录:
1、#include
#include
usingnamespacestd;
classCDate{
public:
intx,n,e;
CDate();
CDate(intx,intn,inte):
x(x),n(n),e(e){}
};
classCPerson{
public:
stringname,sex;
intage;
CPerson();
CPerson(stringname,intage,stringsex):
name(name),age(age),sex(sex){}
voidPrint()
{
cout<}
};
classCStudent:
virtualpublicCPerson{
public:
stringid;
CDateschool;
intgrade;
CStudent();
CStudent(stringname,intage,stringsex,stringid,CDateschool,intgrade):
CPerson(name,age,sex),id(id),school(school),grade(grade){}
voidPrint()
{
cout<}
};
classCTeacher:
virtualpublicCPerson{
public:
stringduty,depart;
CDatework;
CTeacher();
CTeacher(stringname,intage,stringsex,CDatework,stringduty,stringdepart):
CPerson(name,age,sex),duty(duty),depart(depart),work(work){}
voidPrint()
{
cout<}
};
classCGraduate:
publicCStudent{
public:
stringstudy,tutor;
CGraduate();
CGraduate(stringname,intage,stringsex,stringid,CDateschool,intgrade,stringstudy,stringtutor):
CStudent(name,age,sex,id,school,grade),CPerson(name,age,sex),study(study),tutor(tutor){}
voidPrint()
{
cout<}
};
classCGradOnWork:
publicCGraduate,publicCTeacher{
public:
stringname,sex;
intage;
CGradOnWork();
CGradOnWork(stringname,intage,stringsex,stringduty,stringdepart,CDatework,stringid,CDateschool,intgrade,stringstudy,stringtutor):
CTeacher(name,age,sex,work,duty,depart),CGraduate(name,age,sex,id,school,grade,study,tutor),CPerson(name,age,sex),name(name),age(age),sex(sex){}
voidPrint()
{
cout<}
};
intmain()
{
CGradonWorkgradonWork("tzcer","男",33,"15","2003",335,"computer","tangmin","jsj","sxxy","2002-8");
s1.Print();
s1.CTeacher:
:
Print();
s1.CGraduate:
:
Print();
s1.CStudent:
:
Print();
s1.CPerson:
:
Print();}
8、
#include
#include
usingnamespacestd;
classPoint
{
protected:
doublex,y;
public:
Point(){x=0;y=0;}
Point(doublex0,doubley0){x=x0;y=y0;}
doubleget_x(){returnx;}
doubleget_y(){returny;}
friendostream&operator<<(ostream&out,Point&d);
};
ostream&operator<<(ostream&out,Point&d)
{
returnout<<"Point:
("<}
classCircle:
publicPoint
{
protected:
doubler;
public:
Circle(){r=0;}
Circle(doubler0):
r(r0){}
voidset_r(doubler1){r=r1;}
doubleget_r(){returnr;}
doublearea(){return3.14159*r*r;}
friendostream&operator<<(ostream&out,Circle&r);
};
ostream&operator<<(ostream&out,Circle&r)
{
returnout<<"r:
"<"<}
classCylinder:
publicCircle
{
private:
doubleh;
public:
Cylinder(){h=0;}
Cylinder(doubler0,doubleh0):
Circle(r0),h(h0){}
voidset_h(doubleh1){h=h1;}
doubleget_h(){returnh;}
doublearea(){return2*3.14159*r*h+2*3.14159*r*r;}
doublevolume(){returnCircle:
:
area()*h;}
friendostream&operator<<(ostream&out,Cylinder&h);
};
ostream&operator<<(ostream&out,Cylinder&h)
{
returnout<<"h:
"<"<"<}
intmain()
{
Pointps(-2,5);
cout<Circleo
(2);
cout<Cylinderh(2,4);
cout<system("pause");
return0;
}
运行的效果如下:
9、#include
#include
usingnamespacestd;
classbuilding
{
protected:
stringname;
intfloors;
floatareas;
public:
building(string,int,float);
voidprint();
};
building:
:
building(stringq,intm,floats)
{
name=q;
floors=m;
areas=s;
}
voidbuilding:
:
print()
{
cout<<"name:
"<"<"<}
classhouse:
publicbuilding
{
public:
house(stringq,intm,floats,inti,intj):
building(q,m,s)
{
rooms=i;
balcony=j;
}
voidprint();
private:
introoms;
intbalcony;
};
voidhouse:
:
print()
{
cout<<"name:
"<"<"<"<"<}
classoffice:
publicbuilding
{
public:
office(stringq,intm,floats,inta,intb):
building(q,m,s)
{
offices=a;
meetingrooms=b;
}
voidprint();
private:
intoffices;
intmeetingrooms;
};
voidoffice:
:
print()
{
cout<<"name:
"<"<"<"<"<}
intmain()
{
houseq1("住宅",8,520,20,17);
officeq2("办公室",26,530,5,6);
q1.print();
q2.print();
return0;
}
运行的效果如下:
10、#include
#include
usingnamespacestd;
classcomFinal{
protected:
charname[20];
intEnglish,Chinese,Math,Total;
floataverage;
public:
comFinal(char*n,intEng,intChi,intMat);
comFinal(){};
~comFinal(){};
char*getName(){returnname;}
intgetEng(){returnEnglish;}
intgetChi(){returnChinese;}
intgetMat(){returnMath;}
voidsetEng(intx){English=x;}
voidsetChi(intx){Chinese=x;}
voidsetMat(intx){Math=x;}
intgetTotal(){returnEnglish+Chinese+Math;}
floatgetAverage(){return(float)((English+Chinese+Math)/3);}
voidshow();
};
comFinal:
:
comFinal(char*n,intEng,intChi,intMat){
English=Eng;Chinese=Chi;Math=Mat;
strcpy(name,n);
}
voidcomFinal:
:
show(){
cout<<"学生姓名:
"<cout<<"英语成绩:
"<cout<<"语文成绩:
"<cout<<"数学成绩:
"<cout<<"基础分总评:
"<cout<<"基础课平均成绩:
"<}
classaccount:
publiccomFinal{
protected:
intaccoun;
intecon;
intmajtotal;
floatmajave;
public:
account(char*n,intEng,intChi,intMat,intacc,inteco);
account(){};
intgetmajtotal(){returnecon+accoun;}
floatgetmajave(){returnfloat((accoun+econ)/2);}
intgetaccount(){returnaccoun;};
intgetecon(){returnaccoun;}
voidsetaccount(intx){accoun=x;}
voidsetecon(intx){econ=x;}
voidshow();
};
account:
:
account(char*n,intEng,intChi,intMat,intacc,inteco):
comFinal(n,Eng,Chi,Mat){
econ=eco;accoun=acc;
}
voidaccount:
:
show(){
comFinal:
:
show();
cout<<"会计学成绩:
"<cout<<"经济学成绩:
"<cout<<"总分:
"<}
classchemistry:
publiccomFinal{
protected:
intchemistr;
intanaly;
intmajtatal;
floatmajave;
public:
chemistry(char*n,intEng,intChi,intMat,intchem,intanal);
chemistry(){};
intgetmajtotal(){returnanaly+chemistr;}
floatgetmajave(){returnfloat((chemistr+analy)/2);}
intgetche(){returnchemistr;}
intgetanl(){returnanaly;}
voidsetche(intx){chemistr=x;}
voidsetanl(intx){analy=x;}
voidshow();
};
chemistry:
:
chemistry(char*n,intEng,intChi,intMat,intchem,intanal):
comFinal(n,Eng,Chi,Mat){chemistr=chem;analy=anal;}
voidchemistry:
:
show(){
comFinal:
:
show();
cout<<"有机化学成绩:
"<cout<<"化学分析成绩:
"<cout<<"总分:
"<}
intmain()
{
accounta1("cz",90,80,90,80,90);
chemistryc1("zc",80,90,80,90,80);
a1.show();
cout<<"---------------------------"<c1.setanl(100);
c1.show();
}
运行的效果如下图所示:
实验心得:
本次实验用了C++函数定义函数和函数重载,以及相关类的知识点,同时得掌握使用debug进行对函数的调试。
相比之前学的C语言来说这个和之前还是有些区别的,接下来应该多花些时间学好该门课程。
教师签名: