面向对象程序设计实验报告 实验三 继承与多态性 s00016 曾峻.docx

上传人:b****8 文档编号:9106578 上传时间:2023-02-03 格式:DOCX 页数:22 大小:134.63KB
下载 相关 举报
面向对象程序设计实验报告 实验三 继承与多态性 s00016 曾峻.docx_第1页
第1页 / 共22页
面向对象程序设计实验报告 实验三 继承与多态性 s00016 曾峻.docx_第2页
第2页 / 共22页
面向对象程序设计实验报告 实验三 继承与多态性 s00016 曾峻.docx_第3页
第3页 / 共22页
面向对象程序设计实验报告 实验三 继承与多态性 s00016 曾峻.docx_第4页
第4页 / 共22页
面向对象程序设计实验报告 实验三 继承与多态性 s00016 曾峻.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

面向对象程序设计实验报告 实验三 继承与多态性 s00016 曾峻.docx

《面向对象程序设计实验报告 实验三 继承与多态性 s00016 曾峻.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计实验报告 实验三 继承与多态性 s00016 曾峻.docx(22页珍藏版)》请在冰豆网上搜索。

面向对象程序设计实验报告 实验三 继承与多态性 s00016 曾峻.docx

面向对象程序设计实验报告实验三继承与多态性s00016曾峻

广州大学学生实验报告

开课学院及实验室:

计算机科学与工程实验室2014年11月6日

学院

化学化工学院

年级、专业、班

化学2班

姓名

曾峻

学号

s2*******6

实验课程名称

面向对象的程序设计

成绩

实验项目名称

实验三继承与多态性

指导老师

熊伟

一、实验目的

1、掌握继承、基类和派生类的概念。

2、掌握初始化基类成员的方法。

3、掌握派生类对基类的继承。

4、学习虚函数和纯虚函数的定义与使用方式。

5、理解抽象类的概念,学习如何用指针指向其他的派生类,实现多态性。

6、掌握抽象类的定义与使用方式,并注意指针的用法。

7、学习如何使用虚函数、纯虚函数、抽象类和实现类的多态性。

二、使用仪器、器材

1、硬件环境:

微型计算机,2、软件环境:

VisualC++6.0;

三、实验内容及步骤

1、定义派生类的实例

#include"stdafx.h"

#include"string.h"

#include"iostream.h"

classSTUDENT

{protected:

charm_no[12],m_name[11];

intm_sex,m_year,m_month,m_day;

public:

STUDENT(){}

voidset(char*no,char*name,intsex,intyear,intmonth,intday)

{strcpy(m_no,no);

strcpy(m_name,name);

m_sex=sex;

m_year=year;

m_month=month;

m_day=day;

}

voidset_no(char*no)

{strcpy(m_no,no);}

voidset_name(char*name)

{strcpy(m_name,name);}

voidset_sex(intsex)

{m_sex=sex;}

voidset_year(intyear)

{m_year=year;}

voidset_month(intmonth)

{m_month=month;}

voidset_day(intday)

{m_day=day;}

char*get_no()

{returnm_no;}

char*get_name()

{returnm_name;}

intget_sex()

{returnm_sex;}

intget_year()

{returnm_year;}

intget_month()

{returnm_month;}

intget_day()

{returnm_day;}

};

classCLASS:

publicSTUDENT

{protected:

intm_c,m_english;

public:

CLASS(){}

voidset_c(intc)

{m_c=c;}

voidset_english(intenglish)

{m_english=english;}

intget_c()

{returnm_c;}

intget_english()

{returnm_english;}

voidlist()

{cout<<"\n学号:

"<

cout<<"\n姓名:

"<

cout<<"\n性别:

"<<((m_sex==0)?

"女":

"男");

cout<<"\n出生日期:

"<

cout<<"\nC++:

"<

cout<<"\n英语:

"<

}

};

intmain(intargc,char*argv[])

{

charstr[100];

intx,i;

CLASSs[10];

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

{cout<<"\n\n请输入学生的学号:

";

cin>>str;

s[i].set_no(str);

cout<<"姓名:

";

cin>>str;

s[i].set_name(str);

cout<<"性别:

";

cin>>x;

s[i].set_sex(x);

cout<<"出生日期:

";

cin>>x;

s[i].set_year(x);

cin>>x;

s[i].set_month(x);

cin>>x;

s[i].set_day(x);

cout<<"C++:

";

cin>>x;

s[i].set_c(x);

cout<<"英语:

";

cin>>x;

s[i].set_english(x);

}

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

s[i].list();

cout<<"\n\n";

return0;

}

2、多重继承的实例

#include"stdafx.h"

#include"iostream.h"

classBASE1

{public:

voidshow_i()

{cout<

protected:

inti;

};

classBASE2

{public:

voidshow_j()

{cout<

protected:

intj;

};

classDERIVED:

publicBASE1,publicBASE2

{public:

voidset(intx,inty)

{i=x;j=y;}

};

intmain(intargc,char*argv[])

{DERIVEDobj;

obj.set(5,7);

obj.show_i();

obj.show_j();

return0;

}

3、有一个图书馆类,内有数据成员“借书卡号”和“书名”;还有一个学生类,内有数据成员“姓名”。

试设计一个读者类,它是图书馆类和学生类的派生类,继承了它们的所有数据成员和成员函数,在此基础上要添加一个查找函数,可根据输入的读者姓名,显示出该读者的相关信息。

程序设计:

(1)定义一个图书馆类Library,其主要功能是记录读者的借书卡号和书名。

(2)定义一个学生类Student,它的主要作用是记录读者的姓名。

(3)定义一个通过读者类Reader,它是Library和Student的派生类,它除了继承这两个类的数据成员,还定义自己的数据成员,通过该类可以了解到读者的上述所有信息,还记录了读者的借还书日期。

3个类的关系如图所示。

Library类

Student类

CharCard

CharBook

CharName

voidSetLib()

voidDispLib()

voidSetStu()

voidDispStu()

 

Reader类

Chardatabuf(9)

IntDate1(3)

Intdate2(3)

VoidSstBor()

IntFind()

VoidDisplay()

4、虚函数的简单使用。

#include

classbase

{public:

virtualvoidfh(){cout«"Inbaseclass\n";}

};

classsubclass:

publicbase

{public:

virtualvoidfn(){cout«"Insubclass\n";}

};

voidtest(base&b)

{b.fn();}

voidmain()

{basebe;

subclasssc;

cout«"Callingtest(bc)\n";

test(bc);

cout«"Callingtest(sc)\n";

test(sc);

}

5、用抽象类实现的菜单程序。

#include

classMenu

{public:

virtualvoidaction()=0;

};

classitem1:

publicMenu

{public:

virtualvoidaction()

{cout«"新建文件"«endl;}

};

classitem2:

publicMenu

{public:

virtualvoidaction()

{cout«"打开文件"«endl;}

};

classitem3:

publicMenu

{public:

virtualvoidaction()

{cout«"保存文件"«endl;}

};

classitem4:

publicMenu

{public:

virtualvoidaction()

{cout«关闭文件"«endl;}

};

voidmain()

{intselect;

Menu*Fptr[4];

Fptr[O]=newitem1;

Fptr[1]=newitem2;

Fptr[2]=newitem3;

Fptr[3]=newitem4;

Do

{cout«"1newfile"«endl;

cout«"2openfile"«endl;

cout«"3savefile"«endl;

cout«"4closefile"«endl;

cout«"Oexit"«endl;

cin》select;

if(select>=1&&select<=4)Fptr[select-1]->action();

}while(select!

=0);

for(inti=0;i<=3;i++)

{deleteFptr[i];}

6、定义一个从正方形、球体和圆柱体的各种运算中抽象出一个公共基container类,在其中定义表面积和体积的纯虚函数,在抽象类中定义一个公共的成员数据radius,此数据可作为球体的半径,正方形的边长,圆柱体的底面的半径。

分析:

定义一个派生于container类的正方体类cube,在类中都具有求表面积的和体积的重定义的成员函数。

定义一个派生于container类的球体类sphere,在类中都具有求表面积和体积的重定义的成员函数。

定义一个派生于container类的圆柱体类cylinder,在类中都具有求表面积和体积的重定义的成员函数。

7、编写一个人员信息管理系统。

这个系统的功能是:

交互式的实现校园人员信息的录入与显示。

分析:

学校里,主要有四类人员:

大学本科学生、教师、研究生和助教。

大学本科生每周有固定的学时数。

教师除了固定的学时数外,还有每周的教学时数。

研究生除了固定的学时数外,每周还可以自由做一定的研究。

助教生除了上课外,还要做研究和一定的教学工作。

人员的基本信息包括姓名、编号、性别、身份证号、总学时数以及每周固定学时数。

各个人员之间的关系:

people类派生出student类和teacher类,student类派生出graduate类,graduate类和teacher类派生出TA类。

以下给出部分程序:

#include

classpeople

{public:

//添加程序

private:

};

classstudent:

virtualpublicpeople

{public:

//添加程序

private:

};

classteacher:

virtualpublicpeople

{public:

//添加程序

private:

};

classgraduate:

virtualpublicstudent

{public:

//添加程序

private:

};

classTA:

publicpeoplestudent,publicteacher

{public:

//添加程序

private:

};

voidmain()

{//添加程序}

 

四、实验过程原始数据记录

/*

有一个图书馆类,内有数据成员“借书卡号”和“书名”;还有一个学生类,内有数据成员“姓名”。

试设计一个读者类,它是图书馆类和学生类的派生类,

继承了它们的所有数据成员和成员函数,在此基础上要添加一个查找函数,可根据输入的读者姓名,显示出该读者的相关信息。

程序设计:

(1)定义一个图书馆类Library,其主要功能是记录读者的借书卡号和书名。

(2)定义一个学生类Student,它的主要作用是记录读者的姓名。

(3)定义一个通过读者类Reader,它是Library和Student的派生类,它除了继承这两个类的数据成员,还定义自己的数据成员,

通过该类可以了解到读者的上述所有信息,还记录了读者的借还书日期。

*/

#include

usingnamespacestd;

classLibrary

{

public:

intcardno;

charbookname[30];

Library(intc,char*b){strcpy_s(bookname,b);cardno=c;}

};

classStudent

{

public:

charreadername[30];

Student(char*r){strcpy_s(readername,r);}

};

classReader:

publicLibrary,publicStudent

{

public:

charreturndate[30];

Reader(char*rd):

Library(2,"中华经典诵读"),Student("小明")

{strcpy_s(returndate,rd);}

friendvoidprint();

friendReaderoperator<<(constostream&out,constReader&ri);

};

Readeroperator<<(ostream&out,Reader&ri)

{

out<

returnri;

}

voidprint(Reader&ri)

{

cout<

}

voidmain()

{

Readerr1("12月1日");

print(r1);

}

/*6、定义一个从正方形、球体和圆柱体的各种运算中抽象出一个公共基container类,在其中定义表面积和体积的纯虚函数,

在抽象类中定义一个公共的成员数据radius,此数据可作为球体的半径,正方形的边长,圆柱体的底面的半径。

分析:

定义一个派生于container类的正方体类cube,在类中都具有求表面积的和体积的重定义的成员函数。

定义一个派生于container类的球体类sphere,在类中都具有求表面积和体积的重定义的成员函数。

定义一个派生于container类的圆柱体类cylinder,在类中都具有求表面积和体积的重定义的成员函数。

*/

#include

usingnamespacestd;

classcontainer

{

public:

virtualvoidsurfacearea()const=0;

virtualvoidvolume()const=0;

voidgetvalues(doubler){radius=r;}

voidgetvalues(doubler,doubleh){radius=r;height=h;}

doubleradius;

doubleheight;

};

classcube:

publiccontainer

{

public:

voidsurfacearea()const

{

cout<<"正方形面积:

"<

}

voidvolume()const

{

cout<<"正方形体积:

"<

}

};

classsphere:

publiccontainer

{

public:

voidsurfacearea()const

{

cout<<"球体面积:

"<

}

voidvolume()const

{

cout<<"球体体积:

"<<4/3*3.1415926*radius*radius*radius<

}

};

classcylinder:

publiccontainer

{

public:

voidsurfacearea()const

{

cout<<"圆柱体面积:

"<

}

voidvolume()const

{

cout<<"圆柱体体积:

"<<3.1415926*radius*radius*height<

}

};

voidmain()

{

doubler1;

doubleh1;

cubec;

spheres;

cylindercy;

cout<<"请输入半径(或长)"<

cin>>r1;

cout<<"请输入高"<

cin>>h1;

c.getvalues(r1);

c.surfacearea();

c.volume();

s.getvalues(r1);

s.surfacearea();

s.volume();

cy.getvalues(r1,h1);

cy.surfacearea();

cy.volume();

}

/*编写一个人员信息管理系统。

这个系统的功能是:

交互式的实现校园人员信息的录入与显示。

分析:

学校里,主要有四类人员:

大学本科学生、教师、研究生和助教。

大学本科生每周有固定的学时数。

教师除了固定的学时数外,还有每周的教学时数。

研究生除了固定的学时数外,每周还可以自由做一定的研究。

助教生除了上课外,还要做研究和一定的教学工作。

人员的基本信息包括姓名、编号、性别、身份证号、总学时数以及每周固定学时数。

各个人员之间的关系:

people类派生出student类和teacher类,student类派生出graduate类,graduate类和teacher类派生出TA类。

*/

#include

usingnamespacestd;

classpeople

{

public:

charname[30];

charno[30];

charsex[30];

charcardno[30];

inttotalhours;

inthourspw;

/*people(char*n,char*nno,char*s,char*c,intt,inth)

{

strcpy_s(name,n);strcpy_s(no,nno);strcpy_s(sex,s);strcpy_s(cardno,c);totalhours=t;hourspw=h;

}*/

people(){}

};

classstudent:

virtualpublicpeople

{

public:

friendstudentoperator>>(istream&in,student&s)

{

cout<<"请依次输入大学本科生姓名,学号,性别,身份证号,总学时数,每周固定学时数"<

in>>s.name;in>>s.no;in>>s.sex;in>>s.cardno;in>>s.totalhours;in>>s.hourspw;

returns;

}

friendstudentoperator<<(ostream&out,student&s)

{

cout<<"大学本科生:

"<<"学号";out<

cout<<"性别";out<

cout<<"身份证号";out<

cout<<"总学时数";out<

cout<<"每周固定学时数";out<

returns;

}

};

classteacher:

virtualpublicpeople

{

public:

intteachhours;

friendteacheroperator>>(istream&in,teacher&t)

{

cout<<"请依次输入教师姓名,号码,性别,身份证号,总学时数,每周固定学时数,每周教学时数"<

in>>t.name;in>>t.no;in>>t.sex;in>>t.cardno;in>>t.totalhours;in>>t.hourspw;in>>t.teachhours;

returnt;

}

friendteacheroperator<<(ostream&out,teacher&t)

{

cout<<"教师:

"<<"号码";out<

cout<<"性别";out<

cout<<"身份证号";out<

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

当前位置:首页 > PPT模板 > 其它模板

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

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