面象程序设计
(C++)
实验报告
姓名:
学院:数学计算机学院
班级:10级计算机类班
学号:
实验5 单继承
实验目
1.掌握派生类方式
2.解派生类中基类成员基类成员派生类中访问控制
3 掌握继承中构造函数析构函数调程
二实验容步骤
1 出Document类Document派生出Book类增加PageCount变量函数中进行测试创建Book类象进行初始化输出书名页数
2 设计单基继承类层次程序利Person类派生出Student类增加属性xh(学号)Person类中少姓名年龄等数成员成员函数中构造函数初始化析构函数释放相应存储单元输出函数输出数成员值成员函数根需添加函数中进行测试
3 设计员类person日期类date员类派生出学生类student教师类professor学生类教师类数成员birthday日期类函数中进行测试
三实验源程序运行结果
实验()源程序:
#include
#include
using namespace std
class Document
{
public
Document(){}
~Document()
Document(char*name)
char *Name
void PrintNameOf()
}
DocumentDocument(char*name)
{
Namenew char[strlen(name+1)]
strcpy(Namename)
}
Document~Document(){
delete []Name
}
void DocumentPrintNameOf()
{
cout<
class Bookpublic Document
{
public
int PageCount
Book(char *aint b)Document(a)
{
PageCountb
}
}
void main()
{
char BookName[20]
int n
cout<<请输入书名:<
cout<<请输入书页数:<
Book b(BookNamen)
cout<<书名:<
运行结果:
实验(二)源程序:
#include
#include
using namespace std
class person{
public
person(){
name张三
age0
}
person(string cint a){
namec
agea
}
~person(){}
void setname(string c){
namec
}
string getname(){
return name
}
void setage(int a){
agea
}
int getage(){
return age
}
private
string name
int age
}
class studentpublic person
{
public
student(){
xh0
}
student(int d){
xhd
}
student(string cint aint d)person(ca){
xhd
}
~student(){}
void setxh(int d){
xhd
}
int getxh(){
return xh
}
private
int xh
}
void main(){
string c
cout<<请输入学生姓名:\n
cin>>c
cout<<请输入学生年龄:\n
int a
cin>>a
cout<<请输入学生学号:\n
int d
cin>>d
student n(cad)
cout<<请输入学生姓名: <
运行结果:
实验(三)源程序:
#include
using namespace std
class person{
public
person(){
name张三
age0
}
person(string cint a){
namec
agea
}
~person(){}
void setname(string c){
namec
}
string getname(){
return name
}
void setage(int a){
agea
}
int getage(){
return age
}
private
string name
int age
}
class date{
public
date(){
year2011
month12
day17
}
~date(){}
date(int yint mint d){
yeary
monthm
dayd
}
int getyear(){
return year
}
int getmonth(){
return month
}
int getday(){
return day
}
private
int year
int month
int day
}
class studentpublic person{
public
student(){
birthdaydate()
}
student(int yint mint d)birthday(ymd)
{
}
~student(){}
void getbirthday(){
cout<<学生生日:\n
cout<
private
date birthday
}
class teacherpublic person{
public
teacher(){
birthdaydate()
}
teacher(int yint mint d)birthday(ymd)
{
birthdaydate(ymd)
}
~teacher(){}
void getbirthday(){
cout<<老师生日:\n
cout<
private
date birthday
}
void main(){
cout<<请输入学生生日:<
cin>>y>>m>>d
student s(ymd)
cout<<请输入老师生日:<
teacher t(ymd)
sgetbirthday()
tgetbirthday()
}
运行结果:
实验6 继承
实验目
1.掌握基继承访问方法
2.理解类层次中访问规
3.掌握虚基类定义
二实验容步骤
1 定义学生类Student教师类Teacher学生类姓名学号私数成员教师类姓名工作证号职称课程周学时数定义助教类TA继承学生类教师类该类学生类全部数成员教师类课程周学时数数成员求:类提供定义构造函数析构函数通名函数ShowInfo显示全部数成员值
2 设计虚基类Person包含姓名年龄私数成员相关成员函数派生出领导类Leader包含职务部门私数成员相关成员函数Person派生出工程师类Engineer包含职务专业私数成员相关成员函数LeaderEngineer类派生出工程师类Chairman采相关数进行测试
三实验源程序运行结果
实验()源程序:
#include
#include
class Student{
protected
char s_name[20]
int id_s
public
Student(char *nameint id)
void ShowInfo()
}
class Teacher{
protected
char t_name[20]
int id_t
char position[30]
char lesson[30]
int hour
public
Teacher(char *posint h)
Teacher(char *nameint idchar *lesschar *posint h)
void ShowInfo()
}
class TApublic Studentpublic Teacher{
public
TA(char *namechar idchar *lessint h)
void ShowInfo()
}
StudentStudent(char *nameint id){
strcpy(s_namename)
id_sid
}
void StudentShowInfo(){
cout<<姓名:<
TeacherTeacher(char *lessint h){
strcpy(lessonless)
hourh
}
TeacherTeacher(char *nameint idchar *lesschar *posint h){
strcpy(t_namename)
strcpy(lessonless)
strcpy(positionpos)
id_tid
hourh
}
void TeacherShowInfo(){
cout<<姓名:<
TATA(char *namechar idchar *lessint h)Student(nameid)Teacher(lessh){}
void TAShowInfo(){
StudentShowInfo()
cout<<课程:<
void main(){
TA ta(刘九州14c++64)
taShowInfo()
}
运行结果:
实验(二)源程序:
#include
#include
class Person{ 虚基类person类
char name[30]
int age
public
Person(char *nint a)
void setname(char *n)
void setage(int a)
char *getname()
int getage()
}
class Leadervirtual public Person{ 领导类
char job[30] 职务
char dep[30] 部门
public
Leader(char *jbchar *dp)
void setjob(char *jb)
void setdep(char *dp)
char *getjob()
char *getdep()
}
class Engineervirtual public Person{ 工程师类
char major[30] 专业
char prof[30] 职称
public
Engineer(char *majchar *pf)
void setmajor(char *maj)
void setprof(char *pf)
char *getmajor()
char *getprof()
}
class Chairmanpublic Leaderpublic Engineer{ 工程师类
public
Chairman(char *nint achar *jbchar *dpchar *majchar *pf)
void disp()
}
PersonPerson(char *nint a){
strcpy(namen)
agea
}
void Personsetname(char *n){
strcpy(namen)
}
void Personsetage(int a){
agea
}
char *Persongetname(){
return name
}
int Persongetage(){
return age
}
LeaderLeader(char *jbchar *dp)Person(30){
strcpy(jobjb)
strcpy(depdp)
}
void Leadersetjob(char *jb){
strcpy(jobjb)
}
void Leadersetdep(char *dp){
strcpy(depdp)
}
char *Leadergetjob(){
return job
}
char *Leadergetdep(){
return dep
}
EngineerEngineer(char *majchar *pf)Person(30){
strcpy(majormaj)
strcpy(profpf)
}
void Engineersetmajor(char *maj){
strcpy(majormaj)
}
void Engineersetprof(char *pf){
strcpy(profpf)
}
char *Engineergetmajor(){
return major
}
char *Engineergetprof(){
return prof
}
ChairmanChairman(char *nint achar *jbchar *dpchar *majchar *pf)Person(na)Leader(jbdp)Engineer(majpf){}
void Chairmandisp(){
cout<<姓名:<
void main(){
Chairman c(刘九州21厅长财政厅济学高级济师)
cdisp()
}
运行结果:
实验7 态虚函数
实验目
1理解态概念
2掌握虚函数实现运行时态
3掌握利抽象类
二实验容步骤
1 设计图形类(Shape)派生出三角形类(Triangle)正方形类(Square)圆形类(Circle)利虚函数计算图形面积函数中进行测试
2 定义教师类教师类派生出讲师副教授教授类教师工资分基工资课时费津贴构成假设讲师副教授教授基工资分8009001000元课时费分时404550元津贴分130018002300定义虚函数计算教师工资通函数进行验证
三实验源程序运行结果
实验()源程序:
#include
using namespace std
class Shape
{
public
virtual float area()
{return 00}
}
class Trianglepublic Shape
{
public
Triangle()
{bc10h10}
Triangle(float bcfloat h)
{
this>bcbcthis>hh}
bool setbc(float a)
{if(a>0)bca}
float getbc()
{return bc}
bool setg(float b)
{if(b>0)hb}
float getg()
{return h}
float area()
{return bc*h2}
protected
float bch
}
class Squarepublic Shape
{
public
Square()
{l10}
Square(float m)
{this>lm}
bool setbc(float c)
{if(c>0)lc}
float getbc()
{return l}
float area()
{return l*l}
protected
float l
}
class Circlepublic Shape
{
public
Circle()
{radius10}
Circle(float R)
{ this>radiusR}
bool setRadius(float r)
{if(r>0)radiusr}
float getRadius()
{return radius}
float area()
{return 314159*radius*radius}
protected
float radius
}
void displayShapeArea(Shape *p)
{
cout<<图形面积<
area()<
void main()
{
Shape *p1*p2*p3
Triangle T(150100)
Square S(100)
Circle C(100)
p1&T
p2&S
p3&C
displayShapeArea(p1)
displayShapeArea(p2)
displayShapeArea(p3)
}
运行结果:
实验(二)源程序:
#include
using namespace std
class teacher
{
public
virtual float wage()
{return 00}
}
class lecturerpublic teacher
{
public
lecturer()
{WorkHours10}
lecturer(float WorkHours)
{
this>WorkHoursWorkHours
}
bool setWorkHours(float h)
{
if(h>0)WorkHoursh}
float getWorkHours()
{return WorkHours}
float wage()
{
return (800+40*WorkHours+1300)
}
protected
float WorkHours
}
class AssociateProfessorpublic teacher
{
public
AssociateProfessor()
{WorkHours10}
AssociateProfessor(float WorkHours)
{
this>WorkHoursWorkHours
}
bool setWorkHours(float h)
{
if(h>0)WorkHoursh}
float getWorkHours()
{return WorkHours}
float wage()
{
return (900+45*WorkHours+1800)
}
protected
float WorkHours
}
class Professorpublic teacher
{
public
Professor()
{WorkHours10}
Professor(float WorkHours)
{
this>WorkHoursWorkHours
}
bool setWorkHours(float h)
{
if(h>0)WorkHoursh}
float getWorkHours()
{return WorkHours}
float wage()
{
return (1000+50*WorkHours+2300)
}
protected
float WorkHours
}
void displayWage(teacher *s)
{
cout<<工资<wage()<
void main()
{
teacher *s1*s2*s3
lecturer L(305)
AssociateProfessor A(206)
Professor P(105)
s1&L
s2&A
s3&P
displayWage(s1)
displayWage(s2)
displayWage(s3)
}
运行结果:
实验8 运算符重载
实验目
掌握C++中运算符重载机制运算符重载方式
二实验容步骤
1 编写简单复数类Scomplex求友元函数重载+运算符成员函数重载运算符够实现整数浮点数复数加法减法进行测试
2 空间点p坐标(xyz)中xyz整数编写点类Point3D定义空间两点间加+减运算相应三坐标值分进行加减运算求实现空间两点间加+减赋值运算空间两点间较 运算求编写Point3D类声明定义测试程序
3 设计时间类Time包括时分秒等私数成员重载+运算符实现时间加法减法运算进行测试
三实验源程序运行结果
实验()源程序:
#include
class Scomplex{
private
double realimag
public
Scomplex(){
real0 实部
imag0 虚部
}
Scomplex(double xdouble y)
{
realx
imagy
}
Scomplex& operator (Scomplex s)
double getreal()
{
return real
}
double getimag()
{
return imag
}
friend Scomplex operator+(int iScomplex s)
friend Scomplex operator+(double dScomplex s)
friend Scomplex operator(int iScomplex s)
friend Scomplex operator(double dScomplex s)
}
Scomplex& Scomplexoperator (Scomplex s){
if(this&s)
return *this
realsreal
imagsimag
return *this
}
Scomplex operator+(int iScomplex s){
Scomplex t
treali+sreal
timagsimag
return t
}
Scomplex operator+(double dScomplex s){
Scomplex t
treald+sreal
timagsimag
return t
}
Scomplex operator(int iScomplex s){
Scomplex t
trealisreal
timagsimag
return t
}
Scomplex operator(double dScomplex s){
Scomplex t
trealdsreal
timagsimag
return t
}
void main(){
Scomplex s1(3452)s2
s21+s1
cout<<复数s2:(<
cout<<复数s2:(<
cout<<复数s2:(<
cout<<复数s2:(<
运行结果:
实验(二)源程序:
#include
class Point3D
{
public
Point3D()
{
x1
y1
z1
}
Point3D(int aint bint c)
{
xa
yb
zc
}
int getx()
{
return x
}
int gety()
{
return y
}
int getz()
{
return z
}
Point3D& operator (Point3D p)
Point3D operator +(Point3D p)
Point3D operator (Point3D p)
bool operator (Point3D p)
private
int xyz
}
Point3D& Point3Doperator (Point3D p)
{
if(this&p)
return *this
xpx
ypy
zpz
return *this
}
Point3D Point3Doperator +(Point3D p)
{
Point3D t
txx+px
tyy+py
tzz+pz
return t
}
Point3D Point3Doperator (Point3D p)
{
Point3D t
txxpx
tyypy
tzzpz
return t
}
bool Point3Doperator (Point3D p)
{
if(xpx&&ypy&&zpz)
return true
else
return false
}
void main()
{
Point3D p1(123)p2(123)p3p4
p3p1+p2
cout<<两点相加
(<
p4p2p1
cout<<两点相减
(<
cout<
cout<
运行结果:
实验(三)源程序:
#include
class Time
{
public
Time()
{hour0
minute0
second0
}
Time(int hint mint s)
{
hourh
minutem
seconds
}
void setHour(int h)
{hourh}
void setMinute(int m)
{minutem}
void setSecond(int s)
{seconds}
int getHour()
{return hour}
int getMinute()
{return minute}
int getSecond()
{return second}
void displayTime()
{
cout<
Time operator + (Time)
Time operator (Time)
private
int hour
int minute
int second
}
Time Timeoperator+(Time t){
int carryhhmmss
sssecond+tgetSecond()
if(ss>60){
ss60
carry1
}
else carry0
mmminute+tgetMinute()+carry
if(mm>60){
mm60
carry1
}
else carry0
hhhour+tgetHour()+carry
if(hh>24)
hh24
Time tt(hhmmss)
return(tt)
}
Time Timeoperator(Time t){
int borrowhhmmss
sssecondtgetSecond()
if(ss<0){
ss+60
borrow1
}
else borrow0
mmminutetgetMinute()borrow
if(mm<0){
mm+60
borrow1
}
else borrow0
hhhourtgetHour()borrow
if(hh<0) hh+24
Time tt(hhmmss)
return(tt)
}
void main(){
Time t1(13240)t2(153730)t3
t3t1+t2
t3displayTime()
t3t1t2
t3displayTime()
}
运行结果:
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档