最新C++语言程序设计实验答案继承与派生资料Word格式.docx

上传人:b****5 文档编号:20959854 上传时间:2023-01-26 格式:DOCX 页数:20 大小:99.42KB
下载 相关 举报
最新C++语言程序设计实验答案继承与派生资料Word格式.docx_第1页
第1页 / 共20页
最新C++语言程序设计实验答案继承与派生资料Word格式.docx_第2页
第2页 / 共20页
最新C++语言程序设计实验答案继承与派生资料Word格式.docx_第3页
第3页 / 共20页
最新C++语言程序设计实验答案继承与派生资料Word格式.docx_第4页
第4页 / 共20页
最新C++语言程序设计实验答案继承与派生资料Word格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

最新C++语言程序设计实验答案继承与派生资料Word格式.docx

《最新C++语言程序设计实验答案继承与派生资料Word格式.docx》由会员分享,可在线阅读,更多相关《最新C++语言程序设计实验答案继承与派生资料Word格式.docx(20页珍藏版)》请在冰豆网上搜索。

最新C++语言程序设计实验答案继承与派生资料Word格式.docx

------已启动生成:

项目:

cpp,配置:

DebugWin32------

生成启动时间为2013-2-1811:

10:

35。

InitializeBuildStatus:

正在创建“Debug\cpp.unsuccessfulbuild”,因为已指定“AlwaysCreate”。

ClCompile:

main.cpp

f:

\projects\cpp\cpp\main.cpp(13):

errorC2248:

“Animal:

:

age”:

无法访问private成员(在“Animal”类中声明)

f:

\projects\cpp\cpp\main.cpp(8):

参见“Animal:

age”的声明

\projects\cpp\cpp\main.cpp(5):

参见“Animal”的声明

\projects\cpp\cpp\main.cpp(14):

生成失败。

已用时间00:

00:

03.28

==========生成:

成功0个,失败1个,最新0个,跳过0个==========

把age改为公有变量后重新编译就可以了。

程序名:

lab7_1.cpp。

★程序及运行结果:

//lab7_1.cpp

#include<

iostream>

usingnamespacestd;

classAnimal{

private:

//private时出错

//public:

//public和protected正确

intage;

};

classdog:

publicAnimal{

public:

voidSetAge(intn){age=n;

}

intGetAge(){returnage;

voidmain()

{dogd;

d.SetAge(3);

cout<

<

"

Age="

d.GetAge()<

endl;

用public时的结果:

2.(编程)声明一个基类BaseClass,构造其派生类DerivedClass。

在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。

lab7_2.cpp。

参考的运行结果:

//lab7_2.cpp

classBaseClass{

BaseClass(){cout<

构造了一个BaseClass类的对象."

~BaseClass(){cout<

析构了一个BaseClass类的对象."

intNumber;

classDeriveClass:

publicBaseClass{

DeriveClass(){cout<

构造了一个DeriveClass类的对象."

~DeriveClass(){cout<

析构了一个DeriveClass类的对象."

{DeriveClassa;

3.(操作)用调试功能跟踪程序lab7_2的执行过程。

观察基类和派生类的构造函数和析构函数的执行情况。

4.(编程)声明一个车(vehicle)虚基类。

由此派生出自行车(bicycle)类、汽车(motorcar)类,注意把vehicle派生为虚基类。

再从bicycle和motorcar派生出摩托车(motorcycle)类,在main()函数中测试这个类。

lab7_3.cpp。

//lab7_3.cpp

classvehicle{//车类,作为基类

protected:

intMaxSpeed,Weight;

//最大速度,重量

voidRun(){cout<

车vehicle类开始运行!

voidStop(){cout<

车vehicle类停止运行!

classbicycle:

virtualpublicvehicle{//自行车类:

公有继承虚基类vehicle

intHeight;

//高度

classmotorcar:

virtualpublicvehicle{//汽车类:

intSeatNum;

//座位数

classmotorcycle

:

publicbicycle,publicmotorcar{//摩托车类:

公有继承自行车类和汽车类

voidSetdata(intms,intwt,intht,intsn)

{MaxSpeed=ms;

Weight=wt;

Height=ht;

SeatNum=sn;

};

voidShow(){

cout<

最大速度:

MaxSpeed<

重量:

Weight

<

高度:

Height<

座位数:

SeatNum<

voidmain(){

int类型占用字节数:

"

sizeof(int)<

vehicle占用字节数:

sizeof(vehicle)<

bicycle占用字节数:

sizeof(bicycle)<

motorcar占用字节数:

sizeof(motorcar)<

motorcycle占用字节数:

sizeof(motorcycle)<

motorcyclemt;

mt.Run();

mt.Setdata(100,200,130,2);

mt.Show();

mt.Stop();

}

为什么?

按推算应该是:

vehicle占用8字节;

bicycle占用12字节;

motorcar占用12字节;

motorcycle占用16字节。

5.(验证)把vehicle设置为非虚基类。

再编译一次,此时系统报错,无法编译成功。

这是因为若不把vehicle设置为虚基类,会出现二义性错误,程序不能成功编译。

访问vehicle的成员时指明继承路径后,可以纠正二义性错误,试修改程序,然后运行。

★程序的运行结果:

(1)没有指明继承路径(运行结果)

将上面的程序的bicycle类和motorcar类改为非虚基类公有继承vehicle类后,编译时出现二义(ambiguous)性错误:

23:

32。

\projects\cpp\cpp\main.cpp(27):

errorC2385:

对“MaxSpeed”的访问不明确

可能是“MaxSpeed”(位于基“vehicle”中)

也可能是“MaxSpeed”(位于基“vehicle”中)

对“Weight”的访问不明确

可能是“Weight”(位于基“vehicle”中)

也可能是“Weight”(位于基“vehicle”中)

\projects\cpp\cpp\main.cpp(29):

\projects\cpp\cpp\main.cpp(30):

\projects\cpp\cpp\main.cpp(42):

对“Run”的访问不明确

可能是“Run”(位于基“vehicle”中)

也可能是“Run”(位于基“vehicle”中)

errorC3861:

“Run”:

找不到标识符

\projects\cpp\cpp\main.cpp(45):

对“Stop”的访问不明确

可能是“Stop”(位于基“vehicle”中)

也可能是“Stop”(位于基“vehicle”中)

“Stop”:

01.07

(2)指明继承路径(程序及运行结果)

将vehicle中数据成员和函数成员指明路径。

publicvehicle{//自行车类:

publicvehicle{//汽车类:

voidSetdatabicycle(intms,intwt,intht,intsn){

bicycle:

MaxSpeed=ms;

bicycle:

Weight=wt;

//修改,指明路径

Height=ht;

voidShowbicycle(){

bicycle:

//修改,指明路径

mt.bicycle:

Run();

mt.Setdatabicycle(100,200,130,2);

mt.Showbicycle();

mt.motorcar:

Stop();

6.以实验6中的people(人员)类为基类,派生相应的类。

按任务7_4的要求编写程序,并运行。

(1)lab6_7.h:

People(人员)类的声明及成员函数的实现

//lab6_7.h

cstring>

classDate{

intyy,mm,dd;

Date(){}

Date(Date&

d):

yy(d.yy),mm(d.mm),dd(d.dd){}//增添

~Date(){}

intGetyy()const{returnyy;

intGetmm()const{returnmm;

intGetdd()const{returndd;

voidSetyy(inty){yy=y;

voidSetmm(intm){mm=m;

voidSetdd(intd){dd=d;

classPeople{

charname[11];

//姓名,增添

charnumber[7];

//编号,改为数组

charsex[3];

//男或女,改为数组

Datebirthday;

//出生日期

charid[16];

//身份证号,改为数组

People(){}

People(People&

p);

~People(){}

voidGetname(charna[]){strcpy(na,name);

voidGetnumber(charnu[]){strcpy(nu,number);

voidGetsex(charse[]){strcpy(se,sex);

intGetbirthyy()const{returnbirthday.Getyy();

intGetbirthmm()const{returnbirthday.Getmm();

intGetbirthdd()const{returnbirthday.Getdd();

voidGetid(chard[]){strcpy(d,id);

voidSetname(charna[]){strcpy(name,na);

voidSetnumber(charnu[]){strcpy(number,nu);

voidSetsex(charse[]){strcpy(sex,se);

voidSetbirthyy(inty){birthday.Setyy(y);

voidSetbirthmm(intm){birthday.Setmm(m);

voidSetbirthdd(intd){birthday.Setdd(d);

voidSetid(chard[]){strcpy(id,d);

voidinput();

voidoutput();

People:

People(People&

p)

birthday(p.birthday)

{

strcpy(name,p.name);

strcpy(number,p.number);

strcpy(sex,p.sex);

strcpy(id,p.id);

inlinevoidPeople:

input()

姓名:

;

cin>

>

name;

编号:

number;

性别(男/女):

sex;

出生日期(年月日):

inty,m,d;

y>

m>

d;

Setbirthyy(y);

Setbirthmm(m);

Setbirthdd(d);

身份证号:

id;

output()

name<

\n编号:

number<

性别:

sex<

出生日期:

Getbirthyy()<

年"

<

Getbirthmm()<

月"

Getbirthdd()<

日"

id<

(2)lab7_4.h:

People类的派生类

//lab7_4.h

#include"

lab6_7.h"

classstudent:

virtualpublicPeople{//学生类

charclassNo[7];

//班号

student(){}

student(student&

st):

People(st){strcpy(classNo,st.classNo);

}//使用类型兼容规则

~student(){}

voidGetclassNo(charcNo[]){strcpy(cNo,classNo);

voidSetclassNo(char*c){strcpy(classNo,c);

voidinput()

{People:

input();

班号:

classNo;

voidoutput()

output();

classNo<

classteacher:

virtualpublicPeople{//教师类

charprincipalship[11];

//职务

chardepartment[21];

//部门

teacher(){}

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

当前位置:首页 > PPT模板 > 节日庆典

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

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