继承与多态性.docx

上传人:b****0 文档编号:9757117 上传时间:2023-05-21 格式:DOCX 页数:31 大小:69.98KB
下载 相关 举报
继承与多态性.docx_第1页
第1页 / 共31页
继承与多态性.docx_第2页
第2页 / 共31页
继承与多态性.docx_第3页
第3页 / 共31页
继承与多态性.docx_第4页
第4页 / 共31页
继承与多态性.docx_第5页
第5页 / 共31页
继承与多态性.docx_第6页
第6页 / 共31页
继承与多态性.docx_第7页
第7页 / 共31页
继承与多态性.docx_第8页
第8页 / 共31页
继承与多态性.docx_第9页
第9页 / 共31页
继承与多态性.docx_第10页
第10页 / 共31页
继承与多态性.docx_第11页
第11页 / 共31页
继承与多态性.docx_第12页
第12页 / 共31页
继承与多态性.docx_第13页
第13页 / 共31页
继承与多态性.docx_第14页
第14页 / 共31页
继承与多态性.docx_第15页
第15页 / 共31页
继承与多态性.docx_第16页
第16页 / 共31页
继承与多态性.docx_第17页
第17页 / 共31页
继承与多态性.docx_第18页
第18页 / 共31页
继承与多态性.docx_第19页
第19页 / 共31页
继承与多态性.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

继承与多态性.docx

《继承与多态性.docx》由会员分享,可在线阅读,更多相关《继承与多态性.docx(31页珍藏版)》请在冰点文库上搜索。

继承与多态性.docx

继承与多态性

学生实验报告

开课实验室:

2011年4月16日

学院

年级、专业、班

姓名

学号

实验课程名称

面向对象程序设计

成绩

实验项目名称

继承与多态性

指导老师

一、实验目的

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、编写一个程序,定义一个汽车类vehicle,它具有一个需传递参数的构造函数,类中的数据成员包括车轮个数和车的重量,并放到保护段中;定义轿车类car是汽车类vehicle的私有派生类,其中包含载人数;再定义卡车类truck是汽车类vehicle的私有派生类,其中包含载人数和载重量。

每个类都有相应的数据输出。

2、设有系类,它的数据包括系编号、系名,功能包括置数据、修改数据和取数据。

设有班类,它继承系类,另数据包括学号、姓名、性别,功能包括置数据、修改数据和取数据。

主函数默认设置一位同学数据,键盘输入一位同学数据,然后显示二位同学数据。

四、实验程序

Sy3_3:

#include

#include

#include

usingnamespacestd;

classLibrary

{protected:

charcard[15];

charbook[20];

public:

voidsetlib();

voiddisplib();

};

classStudent

{protected:

charname[20];

public:

voidsetstu();

voiddispstu();

};

classReader:

publicLibrary,Student

{protected:

chardatebuf[9];

intdate1[3];

intdate2[3];

public:

Reader();

voidsetbor();

intfind(char*n);

voiddisplay();

};

voidLibrary:

:

setlib()

{

cout<<"输º?

入¨?

卡¡§号?

:

"<

cin>>card;

cout<<"输º?

入¨?

书º¨¦名?

"<

cin>>book;

}

voidLibrary:

:

displib()

{

cout<<"借¨¨书º¨¦卡¡§号?

:

"<

cout<<"书º¨¦名?

:

"<

}

voidStudent:

:

setstu()

{

cout<<"输º?

入¨?

姓?

名?

:

"<

cin>>name;

}

voidStudent:

:

dispstu()

{

cout<<"姓?

名?

:

"<

}

voidReader:

:

setbor()

{

setlib();

setstu();

}

voidReader:

:

display()

{

dispstu();

displib();

}

intReader:

:

find(char*n)

{

if(strcmp(name,n)==0)

return1;

else

return0;

}

Reader:

:

Reader()

{

_strdate(datebuf);//时º¡À间?

格?

式º?

是º?

êo例¤y09/01/08

date1[0]=(datebuf[6]-'0')*10+(datebuf[7]-'0')+2000;

date1[1]=(datebuf[0]-'0')*10+(datebuf[1]-'0');

date1[2]=(datebuf[3]-'0')*10+(datebuf[4]-'0');

/*计?

算?

Date2*/

date2[2]=date1[2];

if(date1[1]+2>12)

{

date2[1]=(date1[1]+2)%12;

date2[0]=date1[0]+1;

}

else

{

date2[0]=date1[0];

date2[1]=date1[1]+2;

}

}

intmain()

{

Reader*p;

intm,i,j=0;

charname[20];

cout<<"请?

输º?

入¨?

人¨?

数ºy:

"<

cin>>m;

p=newReader[m];

for(i=0;i

{

cout<<"第̨²"<

读¨¢者?

的Ì?

借¨¨书º¨¦证¡è:

"<

p[i].setbor();

}

for(i=0;i

{

cout<<"第̨²"<

读¨¢者?

的Ì?

信?

息¡é:

"<

p[i].display();

}

cout<<"请?

输º?

入¨?

要°a查¨¦找¨°的Ì?

读¨¢者?

的Ì?

姓?

名?

"<

cin>>name;

for(i=0;i

{

if(p[i].find(name))

{

p[i].display();

j=1;

break;

}

}

if(j==0)

cout<<"查¨¦找¨°的Ì?

姓?

名?

不?

存ä?

在¨²"<

}

Sy3_6:

#include

usingnamespacestd;

#definePI3.14

classcontainer//基¨´类¤¨¤

{

public:

doubleradius;

virtualvoidsquir()=0;

virtualvoidvolume()=0;

};

classcube:

publiccontainer//正y方¤?

体¬?

类¤¨¤

{

public:

cube(doublea1=0)

{radius=a1;}

voidsquir()

{

doublea2;

a2=radius*radius*6;

cout<<"正y方¤?

体¬?

的Ì?

表À¨ª面?

积y为a:

"<

}

voidvolume()

{

doublea3;

a3=radius*radius*radius;

cout<<"正y方¤?

体¬?

的Ì?

体¬?

积y为a:

"<

}

};

classsphere:

publiccontainer//球¨°类¤¨¤

{

public:

sphere(doubleb1=0)

{radius=b1;}

voidsquir()

{

doubleb2;

b2=4*radius*radius*PI;

cout<<"球¨°的Ì?

表À¨ª面?

积y为a:

"<

}

voidvolume()

{

doubleb3;

b3=4/3*radius*radius*radius*PI;

cout<<"球¨°的Ì?

体¬?

积y为a:

"<

}

};

classcylinder:

publiccontainer//圆2柱¨´体¬?

类¤¨¤

{

private:

doubleh;

public:

cylinder(doublec1=0,doubleh1=0)

{radius=c1;h=h1;}

voidsquir()

{

doublec2;

c2=2*PI*radius*radius+2*PI*radius*h;

cout<<"圆2柱¨´体¬?

的Ì?

表À¨ª面?

积y为a:

"<

}

voidvolume()

{

doublec3;

c3=PI*radius*radius*h;

cout<<"圆2柱¨´体¬?

的Ì?

体¬?

积y为a:

"<

}

};

intmain()

{

cubec(6);

cout<<"正y方¤?

体¬?

的Ì?

边À?

长¡èl=6"<

c.squir();

c.volume();

cout<

spheres

(2);

cout<<"球¨°体¬?

的Ì?

半ã?

径?

r=2"<

s.squir();

s.volume();

cout<

cylindery(2,4);

cout<<"圆2柱¨´体¬?

的Ì?

底Ì¡Á边À?

半ã?

径?

r=2,高?

h=4"<

y.squir();

y.volume();

}

 

Sy3_7:

#include

#include

usingnamespacestd;

classpeople

{public:

charname[20];

intnum;

charsex[20];

inttotaltime;

intweektime;

intiden;

/*people(char*na,intn,char*s,intweek)

{

strcpy(name,na);

num=n;

strcpy(sex,s);

weektime=week;

}*/

voidget()

{

cout<<"输º?

入¨?

姓?

名?

:

";

cin>>name;

cout<<"输º?

入¨?

编À¨¤号?

:

";

cin>>num;

cout<<"输º?

入¨?

性?

别Àe:

";

cin>>sex;

cout<<"输º?

入¨?

身¦¨ª份¤Y证¡è号?

:

";

cin>>iden;

cout<<"输º?

入¨?

每?

周¨¹固¨¬定¡§学¡ì时º¡À:

";

cin>>weektime;

}

voidshow()

{

cout<<"姓?

名?

为a:

"<

cout<<"编À¨¤号?

为a:

"<

cout<<"性?

别Àe:

"<

cout<<"身¦¨ª份¤Y证¡è号?

为a:

"<

cout<<"总Á¨¹学¡ì时º¡À数ºy为a:

"<

}

};

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2