派生类与继承实验报告.docx

上传人:b****2 文档编号:12909542 上传时间:2023-04-22 格式:DOCX 页数:23 大小:85.22KB
下载 相关 举报
派生类与继承实验报告.docx_第1页
第1页 / 共23页
派生类与继承实验报告.docx_第2页
第2页 / 共23页
派生类与继承实验报告.docx_第3页
第3页 / 共23页
派生类与继承实验报告.docx_第4页
第4页 / 共23页
派生类与继承实验报告.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

派生类与继承实验报告.docx

《派生类与继承实验报告.docx》由会员分享,可在线阅读,更多相关《派生类与继承实验报告.docx(23页珍藏版)》请在冰豆网上搜索。

派生类与继承实验报告.docx

派生类与继承实验报告

洛阳理工学院实验报告

实验目的:

1、

2、

3、

4、

掌握派生类的声明方法和派生类构造函数的定义方法;掌握不同继承方式下,基类成员在派生类中的访问属性;掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则;学习虚基类在解决二义性问题中的作用。

实验条件:

软件的计算机

装有MicrosoftVisualC++6.0

实验内容:

1.输入下列程序。

//test4_1.cpP

#include

usingnamespacestd;

classBase{

public:

voidsetx(inti)

{x=i;}

IntgetxO{returnx;}

public:

intx;

};

classDerived:

publicBase{

public:

voidsety(inti){y=i;}intgetyO{returny;}voidshow(){coutvv”Base:

:

x=”<

}

public:

inty;

};

intmain()

{Derivedbb;

bb,setx(16);

bb.sety(25);

coutvv”

coutvv”

coutvv”coutvv”return0;

}

bb.showO;

Base:

:

x=”wbb.xwendl;Denved:

:

y=”wbb.ywendl;Base:

:

x=”wbb.getxQwendl;Derived:

:

y=”wbb.getyQwendl;

写出程序的运行结果。

Base;:

x=16

Base:

x-16Dei'iued:

:

y=2E

B込SE=;x=16Derived:

:

y=25

请按任意键继续...

(2)按以下要求,对程序进行修改后再调试,指出调试中出错的原因。

1将基类Base中数据成员x的访问权限改为private时,会出现哪些错误?

为什么?

2将基类Base中数据成员x的访问权限改为protected什么?

3在源程序的基础上,将派生类Derived的继承方式改为错误?

为什么?

4在源程序的基础上,将派生类Derived的继承方式改为些错误?

为什么?

时,会出现哪些错误?

private时,会出现哪些

Protected时,会出现哪

 

 

解答如下;

①将基类Base中数据成员x的访问权限改为private时,会出现哪些错误?

为什么?

Coifiling...

tyexpp

C;Wur)enbandSettings\fl(lii(iistratd.cpp[19);errorC32iiB:

'k':

cainotaccessprivatenenberdeclaredincl血'Ba&e'andStttiii^\fldnini5trat(ir\tye.cpp(10|:

血歯utionof

C;WunentsandSettings\fl(liiiiistralor\ti|P.cpp[291:

errorC22iiB:

'k':

cannot乳佣釣priuatenentterdeclaredincl?

和'Ba&p'C:

\imcijnentsandgottingH血ini刖血f训巴聊(10):

seefpcLaratianof'f

ErrorexecutingcI.eKe,

因为基类Base中数据成员x的访问权限改为private时,基类的私有成员在派生类中并没有成为派生类的私有成员,使得再通过派生类的对象调用x时,不能被系统所识别,出现了错误。

②将基类Base中数据成员x的访问权限改为protected时,会出现哪些错误?

为什么?

-Ccnfiquration:

rtuif-盛们2蚀Mq

CDnpilLig...

rhj^.cpp

C:

\DacuneiitsandSfttiiigs\(1dnini&lrator\^5\rt»jy-cpp(2SI:

errorC22酹:

"e':

cannotaccessprotectedwrtcrdeclaredinclasslast'C:

\[>ocu™e(itsandFMti呗帥ni血Hator、桌耐rtiij■唧⑴];seededdNlinndF'f

Errarwecutingcl.eife.

r训』bj-1error[s),0祈fni叫(5)

因为基类Base中数据成员x的访问权限改为protected时,公用基类的保护成员在公用派生类中的访问属性仍然是保护,在公用派生类外就不能通过公用派生类的对象访问该成员,所以出现了错误。

③在源程序的基础上,将派生类Derived的继承方式改为private时,会出现哪

些错误?

为什么?

切甲ili凹

rtuy.cpp

C:

\Dacunfit£andSeCting^tOdunistr.cpp(2AJ:

error血岖:

'set*':

cannotmenpublicnenherdttlarrdin□砧s"臨e'C:

\Dociinentsandttlngs\Adnnistrator-0(1()CS]:

seed^cl^ratiait肝'ietx'

C:

\Cocunentsand昶tting斟MnniEt恂toiA臬血rtu卜叩p寿):

errarC22iiS:

'x':

cannotaccES?

publiEhiMwdtclar^dinclass'Bast'C:

\DvcunfntsiniSettingsVfldiiiiiistraterV^.eppC1B);itsdfcljratiuncf'n'

匸:

训ocunp血iniSettingi^ndnnistrjtar\^.epp(31):

frrorC221i8:

'gptit':

cannotaccesspublicnpnherd^clar^dincl^ss'臨丁C:

\[iacuinBnt£andSetCingsMKliiinislritor面肝tuy.cpp⑴:

SfedfCl^NtionoF'gelK'

ErrorexFciiting

rluy*cbj-3trror估h8uarringf^)

将派生类Derived的继承方式改为private时,私有基类中的公用成员在私有派生类中的访问属性为私有,在类外不能通过对象调用私有成员,只能通过成员函数调用.

④在源程序的基础上,将派生类Derived的继承方式改为protected时,会出现

哪些错误?

为什么?

ConfiguratiDll:

t-Win眈Debug

佃叩iling+r

t.cpp

c;\[]ocuiipiitsandsetting5\adninistrator\Lcpp[26):

errorC22i(8:

'sptx':

cannotaccesspubliciKidprdeclaredincUss'Base'c:

\docuw[itsandsettings\iJuinistratar\t,cpp(E);seedeclarationof'seh'

c:

\docuiipiitsandsettings\adninistrator\Lcpp[29):

error促测:

*:

cdirnotaccesspublicnemberdeclaredinclass'Base*c:

ld(Miwntsandsettings\jdninisttQr\t.cpp(1fl):

5eetiHlmration肝霍‘

因为私有继承时基类中的公有函数到派生类中一是私有成员,不能通过对象访问,

只能通过成员函数来访问。

2.编写一个学生和教师的数据输入和显示程序。

学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。

要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师

类Teacher的基类。

供参考的类结构如下:

classPerson{

};

classStudent:

publicPerson{

};

classTeacher:

publicPerson{};

程序代码:

#include

#includevstring>

usingnamespacestd;

classPerson

{public:

Person(intn,stringnam,chars,inta)

{num=n;

name=nam;

sex=s;

age=a;

}

~Person(){}

protected:

intnum;

stringname;

charsex;

intage;

};

classStudent:

publicPerson

{public:

Student(intn,stringnam,chars,inta,stringap,intsc):

Person(n,nam,s,a)

{apart=ap;

score=sc;

}

voidshow1()

{coutvv"num:

"vvnumvvendl;

coutvv"name:

"vvnamevvendl;coutvv"sex:

"vvsexvvendl;

coutvv"age:

"vvagevvendl;

coutvv"apart:

"vvapartvvendl;

coutvv"score:

"vvscorevvendlvvendl;

}

~Student(){}

private:

stringapart;

intscore;

};

classTeacher:

publicPerson

{

public:

Teacher(intn,stringnam,chars,inta,stringz,stringt):

Person(n,nam,s,a)

{zhi=z

title=t;

}

voidshow2()

{coutvv"num:

"vvnumwendl;coutvv"name:

"vvname<

"vvsexvvendl;coutvv"age:

"vvagevvendl;coutvv"zhi:

"vvzhivvendl;coutvv"title:

"vvtitlevvendl;

}

~Teacher(){}

private:

stringzhi;

stringtitle;

};

intmain()

{StudentS(1001,"yang-heng",f,21,"computer",98);

TeacherT(2009,"li-sheng",f,35,"manager","education");

S.show1();

T.show2();

return0;

}

程序运行结果:

匚ir]回:

删悯刪顾蹄Mr™

nun:

1阿01

name:

yang-heng

sex:

f

age;21

apart■conputei*

score198

nun:

2^09nane:

li-sliens(scx:

fage:

35

2himanasTtrtitle:

edueation请按任意键继续.

(3)调试程序时会出现以下错误:

调用函数是应注意其访问权限,基类函数的私有成员只能被其成员函数访问,不能被派生类的对象和成员函数所访问,还要注意调用派生类的构造函数时的参数列表表达形式。

(4)结果分析:

注意构造函数和派生类调用基类的构造函数赋值,在后面对新增的参数初始化,通过对象赋值后再对其输出。

3.按要求阅读、编辑、编译、调试和运行以下程序。

(1)阅读、编辑、编译、调试和运行以下程序,并写出程序的运行结果。

//test4_3_1.cpP

#include

#include

usingnamespacestd;

classMyArray{

public:

MyArray(intleng);

~MyArray();

voidInput();

voidDispIay(string);

protected:

int*alist;

intlength;

};

MyArray:

:

MyArray(intleng)

{if(lengv=0)

{coutvv"errorlength";

exit

(1);

}

alist=newint[leng];

length=leng;if(alist==NULL){cout<<"assignfailure";

exit

(1);

"<

}cout<<"MyArray类对象已创建。

}

MyArray:

:

~MyArray()

"<

{delete[]alist;cout<<"MyArray类对象被撤销。

}

voidMyArray:

:

Display(stringstr)

{inti;

int*p=alist;

H・

coutvvstrvviengthw"个整数:

for(i=0;ivlength;i++,p++)

coutvv*pw"";

coutvvendl;

}

voidMyArray:

:

lnput()

{coutvv"请键盘输入"<

";inti;

int*p=alist;

for(i=0;ivlength;i++,p++)cin>>*p;

}

intmain()

{MyArraya(5);

a.Input();

a.Display("显示已输入的");return0;

}

1=1回

nyArra疥对象已创建*

W®盘输人5个整数江225171920显示已输入旌适整数:

1225171920请按任蟲克…

(2)声明一个类SortArray继承类MyArray,在该类中定义一个函数,具有将输入的整数从小到大进行排序的功能。

程序代码:

#includeviostream>

#includeusingnamespacestd;

classMyArray

{

public:

MyArray(intleng);-MyArrayO;

voidInput();voidDisplay(string);

protected:

int*alist;

intlength;};

classSortArray:

publicMyArray{public:

voidSort();

SortArray(intleng):

MyArray(leng){coutvv"SortArray类对象已创建。

"<

}

virtual~SortArray();

};

SortArray:

:

~SortArray(){cout<<"SortArray类对象被撤销。

"<

}

MyArray:

:

MyArray(intleng){if(lengv=0)

{cout<<"errorlength";exit

(1);

}

alist=newint[leng];length=leng;

if(alist==NULL)

{cout<<"assignfailure";exit

(1);

}coutvv"MyArray类对象已创建。

"<

MyArray:

:

~MyArray()

{

delete[]alist;

coutvv"MyArray类对象被撤销。

"<

}

voidMyArray:

:

Display(stringstr)

{inti;

int*p=alist;coutvvstrvviengthw"个整数:

";for(i=0;i

coutvvendl;

}

voidMyArray:

:

Input()

{coutvv"请键盘输入"<

";inti;

int*p=alist;

for(i=0;ivlength;i++,p++)cin>>*p;

}

voidSortArray:

:

Sort()

{inttemp,i,j;

for(i=0;ivlength-1;i++)

for(j=0;jvlength-1-i;j++)

if(alist[j]>alist[j+1])

{temp=alist[j];alist[j]=alist[j+1];alist[j+1]=temp;

}intmain(){SortArrays(5);s.lnput();s.Display("显示排序以前的");s.SortO;

s.Display("显示排序以后的");return0;

}

程序运行结果:

I'C:

\Users\dell\Documents\C-Free\TennS1.exe"

--*——一一T、-1^/■-—I—IJ严■

Soi*tArmy类对象已创建*

E

1695

256?

盘髄入5个嚳熱2169显示专時嵋睡鹰加Myftrra熾对無破徹辛筲亠请按任蟲翳.•-

(2).声明一个类ReArray继承类MyArray,在该类中定义一个函数,具有将输入的整数进行倒置的功能。

程序代码:

#includeviostream>

#include

usingnamespacestd;

classMyArray{

public:

MyArray(intleng);

-MyArrayO;

voidInput();

voidDisplayGtring);

protected:

int*alist;

intlength;

};

classReArray:

publicMyArray{

public:

voidreverse();

-ReArrayO

{coutvv"ReArray类对象被撤销。

"wendl;

};

ReArray(intleng):

MyArray(leng){coutvv"ReArray类对象已创建。

}

};

MyArray:

:

MyArray(intleng)

{if(lengv=O)

{cout<<"errorlength";exit

(1);

}

alist=newint[leng];

length=leng;if(alist==NULL){coutvv"assignfailure";exit

(1);

}cout<<"MyArray类对象已创建。

}

MyArray:

:

~MyArray()

{delete[]alist;cout<<"MyArray类对象被撤销。

}voidMyArray:

:

Display(stringstr){inti;int*p=alist;coutvvstrvviengthw"个整数:

";for(i=0;i

}

voidMyArray:

:

Input()

{coutvv"请键盘输入"<

";inti;

int*p=alist;

for(i=0;ivlength;i++,p++)cin>>*p;

}

voidReArray:

:

reverse()

{inti,temp;

for(i=0;ivlength-2;i++)

{temp=alist[i];alist[i]=alist[4-i];alist[4-i]=temp;

}

"<

"<

"<

 

 

intmain()

{ReArraya(5);

a.Input();

a.Display("显示已输入的");a.reverseO;

a.Display("显示已输出的");return0;

}

程序运行结果:

■C:

\UKrs\ckll\Doajment叭匚・卩阳科口阳戸\未DnSl.exe"

(3)声明一个类AverArray继承类MyArray,在该类中疋义一个函数,具有求输入的整数平均值的功能。

程序代码:

#includeviostream>

#includeusingnamespacestd;

classMyArray

{

public:

MyArray(intleng);

-MyArrayO;

voidInput();

voidDisplayGtring);

protected:

int*alist;

intlength;};

MyArray:

:

MyArray(intleng){if(lengv=0)

{cout<<"errorlength";exit

(1);

}

alist=newint[leng];length=leng;

if(alist==NULL)

{cout<<"assignfailure";exit

(1);

}cout<<"MyArray类对象已创建。

"<

MyArray:

:

~MyArray()

{

delete[]alist;

cout<<"MyArray类对象被撤销。

"<

voidMyArray:

:

Display(stringstr)

{inti;

int*p=alist;coutvvstrvviengthw"个整数:

";for(i=0;i

coutvvendl;

}

voidMyArray:

:

Input()

{coutvv"请键盘输入"<

";inti;

int*p=alist;for(i=0;ivlength;i++,p++)cin>>*p;

}

classAverArray:

publicMyArray{

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

当前位置:首页 > 幼儿教育 > 唐诗宋词

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

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