实验九继承.docx

上传人:b****7 文档编号:10434850 上传时间:2023-02-11 格式:DOCX 页数:16 大小:17.16KB
下载 相关 举报
实验九继承.docx_第1页
第1页 / 共16页
实验九继承.docx_第2页
第2页 / 共16页
实验九继承.docx_第3页
第3页 / 共16页
实验九继承.docx_第4页
第4页 / 共16页
实验九继承.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

实验九继承.docx

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

实验九继承.docx

实验九继承

实验九继承

1、实验目的

1)掌握继承的实现方法;

2)继承中常见问题的处理方法。

2、实验内容

2.1派生类----单继承

1.分析下面的程序,指出程序运行的结果

#include

classCBase

{public:

voidfn1();

};

voidCBase:

:

fn1()

{cout<<"调用基类类的函数fn1()\n";

}

classCDerived:

publicCBase

{

public:

voidfn1();

};

voidCDerived:

:

fn1()

{cout<<"调用派生类的函数fn1()\n";

}

voidmain()

{

CDerivedd1;

CBase*pb=&d1;

CBase&pd=d1;

d1.fn1();

pb->fn1();

pd.fn1();

}

运行结果:

调用派生类的函数fn1()

调用基类类的函数fn1()

调用基类类的函数fn1()

Pressanykeytocontinue

2.2编写并调试程序:

1)p190习题4.14

#include

usingnamespacestd;

classA{

private:

inta;

public:

A()

{a=0;}

A(inti)

{a=i;}

voidPrint()

{cout<

};

classB:

publicA{

private:

intb1,b2;

public:

B()

{b1=0;b2=0;}

B(inti)

{b1=1;b2=0;}

B(inti,intj,intk):

A(i),b1(j),b2(k)

{}

voidPrint()

{

A:

:

Print();

cout<

}

};

intmain()

{

Bob1,ob2

(1),ob3(3,6,9);

ob1.Print();

ob2.Print();

ob3.Print();

return0;

}

运行结果:

0,0,0

0,1,0

3,6,9

Pressanykeytocontinue

2)定义一个图形类,其中有保护类型的成员数据:

高度和宽度,一个公有的构造函数。

由该图形类建立两个派生类:

矩形类和等腰三角形类。

在每个派生类中都包含一个函数area(),分别用来计算矩形和等腰三角形的面积。

1.程序设计如下:

#include

classpicture

{

protected:

doubleh,w;

public:

picture(doublei,doublej){h=i;w=j;}

};

classjpicture:

publicpicture

{doublemi;

public:

jpicture(doublei,doublej):

picture(i,j){}

voidarea()

{mi=h*w;

cout<<"jpicture'sarea:

"<

}

};

classsanjiaoxing:

publicpicture

{

doublemi;

public:

sanjiaoxing(doublei,doublej):

picture(i,j){}

voidarea()

{mi=0.5*h*w;

cout<<"sanjiaoxing'sarea:

"<

}

};

voidmain()

{jpicturea(1,2);

sanjiaoxingb(3,4);

a.area();

b.area();

}

2.实验结果:

jpicture'sarea:

2

sanjiaoxing'sarea:

6

Pressanykeytocontinue

2.3多继承和虚基类

1)分析下面的程序,指出程序运行的结果:

#include

classCBase1

{

intx;

public:

CBase1()

{x=0;cout<<"调用构造函数CBase1()!

\n";}

CBase1(inta)

{x=1;cout<<"调用构造函数CBase1(int)!

\n";}

~CBase1(){cout<<"调用析构函数~CBase1()!

\n";}

};

classCBase2

{inty;

public:

CBase2()

{y=0;cout<<"调用构造函数CBase2()!

\n";}

CBase2(inta)

{y=a;cout<<"调用构造函数CBase2(int)!

\n";}

~CBase2(){cout<<"调用析构函数~CBase2()!

\n";}

};

classA

{intx;

public:

A(){x=0;cout<<"调用构造函数A()!

\n";}

A(inta){x=a;cout<<"调用构造函数A(int)!

\n";}

~A(){cout<<"调用析构函数~A()!

\n";}

};

classCDerived:

publicCBase1,virtualpublicCBase2

{

Aa;

public:

CDerived()

{cout<<"调用构造函数CDerived()!

\n";}

CDerived(intx,inty,intz):

a(x),CBase1(y),CBase2(z)

{cout<<"调用构造函数CDerived(int,int,int)!

\n";}

~CDerived(){cout<<"调用析构函数~CDerived()!

\n";}

};

voidmain()

{

CDerived*x=newCDerived;

CDerivedy(2,3,4);

deletex;

cout<<"main()函数结束!

\n";

}

实验结果:

调用构造函数CBase2()!

调用构造函数CBase1()!

调用构造函数A()!

调用构造函数CDerived()!

调用构造函数CBase2(int)!

调用构造函数CBase1(int)!

调用构造函数A(int)!

调用构造函数CDerived(int,int,int)!

调用析构函数~CDerived()!

调用析构函数~A()!

调用析构函数~CBase1()!

调用析构函数~CBase2()!

main()函数结束!

调用析构函数~CDerived()!

调用析构函数~A()!

调用析构函数~CBase1()!

调用析构函数~CBase2()!

Pressanykeytocontinue

编写并调试程序

1)p196习题4.21

#include

usingnamespacestd;

classTime{

public:

Time(inth,intm,ints)

{hours=h;minutes=m;seconds=s;}

voiddisplay()

{cout<<"出生时间:

"<

}

protected:

inthours,minutes,seconds;

};

classDate{

public:

Date(intM,intd,inty)

{month=M;day=d;year=y;

}

voiddisplay()

{cout<<"出生年月:

"<

}

protected:

intmonth,year,day;

};

classBirthtime:

publicTime,publicDate{

char*Childname;

public:

Birthtime(char*Childname1,inth,intm,ints,intM,intd,inty):

Time(h,m,s),Date(M,d,y)

{Childname=newchar[strlen(Childname1)+1];

strcpy(Childname,Childname1);}

~Birthtime()

{delete[]Childname;}

voiddisplay()

{cout<<"Childname:

"<

Time:

:

display();

Date:

:

display();

}

};

voidmain()

{

Birthtimeb("xiaoming",18,37,28,6,30,1992);

b.display();

}

实验结果:

Childname:

xiaoming

出生时间:

18时37分28秒

出生年月:

1992年6月30日

Pressanykeytocontinue

2)定义一个人员类cpeople,其属性有(保护类型):

姓名、性别、年龄;从中派生出学生类cstudent,添加属性:

学号、入学时间和入学成绩;从cpeople类再派生出教师类cteacher,添加属性:

职务、部门、工作时间;有cstudent类派生研究生类cgraduate,添加属性:

研究方向和导师,由cgraduate和cteacher共同派生出在职研究生类cgradonwork,分别定义其中的构造函数和输出函数。

主函数中定义各种类的对象,并完成测试。

1.程序设计如下:

#include

#include

usingnamespacestd;

classcpeople{

protected:

stringname;

charsex;

intage;

public:

cpeople(stringname1,charsex1,intage1)

{name=name1;sex=sex1;age=age1;}

voidprint()

{cout<<"name:

"<

cout<<"sex:

"<

cout<<"age:

"<

}

};

classcstudent:

virtualpubliccpeople{

protected:

stringnum;

intyear,month,day;

doublee_score;

public:

cstudent(stringname1,charsex1,intage1,stringnum1,intyear1,intmonth1,intday1,doublee_score1):

cpeople(name1,sex1,age1)

{num=num1;year=year1;month=month1;day=day1;e_score=e_score1;}

voidprint()

{cpeople:

:

print();

cout<<"num:

"<

cout<<"Entertime:

";

cout<

cout<<"Enterscore:

"<

}

};

classcteacher:

virtualpubliccpeople{

protected:

stringtitle;

stringdept;

intw_time;

public:

cteacher(stringname1,charsex1,intage1,stringtitle1,stringdept1,intw_time1):

cpeople(name1,sex1,age1)

{title=title1;dept=dept1;w_time=w_time1;}

voidprint()

{cpeople:

:

print();

cout<<"title:

"<

cout<<"dept:

"<

cout<<"w_time:

"<

}

};

classcgraduate:

publiccstudent{

protected:

stringmajor;

stringm_teacher;

public:

cgraduate(stringname1,charsex1,intage1,stringnum1,intyear1,intmonth1,intday1,doublee_score1,

stringmajor1,stringm_teacher1):

cpeople(name1,sex1,age1),cstudent(name1,sex1,age1,num1,year1,month1,day1,e_score1)

{major=major1;m_teacher=m_teacher1;}

voidprint()

{cstudent:

:

print();

cout<<"major:

"<

cout<<"m_teacher:

"<

}

};

classcgradonwork:

publiccgraduate,publiccteacher{

public:

cgradonwork(stringname1,charsex1,intage1,stringnum1,intyear1,intmonth1,intday1,doublee_score1,

stringmajor1,stringm_teacher1,stringtitle1,stringdept1,intw_time1):

cpeople(name1,sex1,age1),cgraduate(name1,sex1,age1,

num1,year1,month1,day1,e_score1,major1,m_teacher1),cteacher(name1,sex1,age1,title1,dept1,w_time1)

{}

voidprint()

{cgraduate:

:

print();

cout<<"dept:

"<

cout<<"title:

"<

cout<<"w_time:

"<

}

};

voidmain()

{

cpeoplec1("南宫",'m',24);

cout<<"People:

"<

c1.print();

cstudentc2("蓝莎",'f',20,"11084521",1991,5,23,92);

cout<<"Student:

"<

c2.print();

cteacherc3("金秀炫",'m',31,"博士","化工",25);

cout<<"Teacher:

"<

c3.print();

cgraduatec4("布莱德利詹姆斯",'m',24,"11552555",1992,5,7,97,"jisuanji","苏志燮");

cout<<"Graduate:

"<

c4.print();

cgradonworkc5("崔智友",'f',23,"12553515",1992,6,25,91,"计算机","李胜基","网络管理员","计通学院",7);

cout<<"Gradonwork:

"<

c5.print();

}

2.实验结果:

People:

name:

南宫

sex:

m

age:

24

Student:

name:

蓝莎

sex:

f

age:

20

num:

11084521

Entertime:

5\23\1991

Enterscore:

92

Teacher:

name:

金秀炫

sex:

m

age:

31

title:

博士

dept:

化工

w_time:

25

Graduate:

name:

布莱德利詹姆斯

sex:

m

age:

24

num:

11552555

Entertime:

5\7\1992

Enterscore:

97

major:

m_teacher:

苏志燮

Gradonwork:

name:

崔智友

sex:

f

age:

23

num:

12553515

Entertime:

6\25\1992

Enterscore:

91

major:

m_teacher:

李胜基

dept:

计通学院

title:

网络管理员

w_time:

7

Pressanykeytocontinue

3、实验结论:

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

当前位置:首页 > 工程科技 > 电力水利

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

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