C++语言程序设计实验答案-继承与派生_第1页
C++语言程序设计实验答案-继承与派生_第2页
C++语言程序设计实验答案-继承与派生_第3页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验07继承与派生4学时第7章 继承与派生一、实验目的学习声明和使用类的继承关系,声明派生类。(2) 熟悉不同继承方式下对基类成员的访问控制。(3) 学习利用虚基类解决二义性问题。二、实验任务7_1声明一个基类Animal。有私有整型成员变量 age,构造其派生类dog,在其成员函数 SetAge(int n)中直接给age 赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。7_2声明一个基类BaseClass。有整型成员变量 Number,构造其派生类 DerivedClass,观察构造函数和析构函数的执 行情况。7_3声明一个车(vehicle)基类。具有MaxS

2、peed、Weight等成员变量,Run Stop等成员函数,由此派生出自行车(bicycle) 类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位 数(SeatNum)等属性。从 bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中, 注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。7_4以实验6中的People人员类为基类。派生出student学生类,添加属性:班号char classNo7;派生出teacher教师类,添加属性:职务 cha

3、r principalship11、部门char department21。从student类中派生出 graduate研究生类,添加属性:专业char subject21、导师teacher adviser ;从graduate类和teacher类派生出TA助教生类,注意虚基类的使用。重载相应的成员函数,测试这些类。三、实验步骤1. 编程声明基类Animal,成员变量age声明为私有的。构造派生类dog,在其成员函数 SetAge(int n)中直接对age赋值时,会出现类似以下的 错误提示:注:在桌面创立一个文本文件,将输出框的内容复制到文本文件中,再复制到 Word文件中,不会出现汉字的

4、乱码用private 时的结果:1 已启动生成:工程:cpp, 配置:Debug Win321生成启动时间为2022-2-18 11:10:35。1l nitializeBuildStatus:1 正在创立,因为已指定AlwaysCreate 。1CICompile:1f:projectscppcppmain.cpp(13):error C2248: Animal:age : 无法访问 private成员(在Animal 类中声明)1f:projectscppcppmain.cpp(8):参见Animal:age 的声明1f:projectscppcppmain.cpp(5):参见Animal

5、 的声明1f:projectscppcppmain.cpp(14):error C2248: Animal:age :无法访问 private成员(在Animal 类中声明)1f:projectscppcppmain.cpp(8):参见Animal:age 的声明1f:projectscppcppmain.cpp(5):参见Animal 的声明11生成失败。1=生成:成功0 个,失败1个,最新 0 个,跳过0 个=把age改为公有变量后重新编译就可以了。程序名:程序及运行结果:#in clude using namespace std;class An imalprivate : /priva

6、te 时出错int age;class dog: public Animalpublic :void SetAge( int n) age=n; int GetAge() return age; ;void mai n() dog d; d.SetAge(3); cout Age= d.GetAge() 已启动生成:工程:cpp, 配置:Debug Win321生成启动时间为 2022-2-18 11:10:35。1l nitializeBuildStatus:1 正在创立,因为已指定AlwaysCreate 。1CICompile:1f:projectscppcppmain.cpp(13):

7、error C2248: Animal:age : 无法访问 private成员(在Animal 类中声明)1f:projectscppcppmain.cpp(8):参见Animal:age 的声明1f:projectscppcppmain.cpp(5):参见Animal 的声明1f:projectscppcppmain.cpp(14):error C2248: Animal:age :无法访问 private成员(在Animal 类中声明)1f:projectscppcppmain.cpp(8):参见Animal:age 的声明1f:projectscppcppmain.cpp(5):参见A

8、nimal 的声明11生成失败。1= 生成:成功0个,失败 1个,最新 0个,跳过 0个=用public时的结果:C C: fUIDDISsystE32cB(l. ere喟技任蕙褲继续.2. 编程声明一个基类 BaseClass,构造其派生类DerivedClass。在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。程序名:。参考的运行结果:c C;1IHDOISST5tei32cid. ezeBBS|麻 JlS. 了 血百 M一 Q瓚造了 一 丁恥片丄毗门朋盟芙的府象-a粧稿 BeriweClissg的对數-祈构了 一 JBasudlQZ交的对象.睛按任羸犍塑粟

9、 . . _1程序及运行结果:#in clude using namespace std;class BaseClass public :BaseClass() cout 构造了一个 BaseClass 类的对象.endl; BaseClass() cout析构了一个 BaseClass 类的对象.endl; private :int Number;class DeriveClass: public BaseClass public :DeriveClass() cout 构造了一个 DeriveClass 类的对象.endl; DeriveClass() cout 析构了一个 DeriveC

10、lass 类的对象.endl; ; void mai n() DeriveClass a; 口1刈as?3. :操作用调试功能跟踪程序lab7 2的执行过程。观察基类和派生类的构造函数和析构函数的执行情况。4. 编程声明一个车(vehicle)虚基类。由此派生出自行车(bicycle)类、汽车(motorcar)类,注意把vehicle派生为虚基类。再从bicycle和motorcar派生出摩托车(motorcycle)类,在 main()函数中测试这个类。程序名:参考的运行结果:程序及运行结果:#in clude using namespace std;class vehicle /车类,作

11、为基类protected :int MaxSpeed,Weight; / 最大速度,重量public:void Run() cout车 vehicle 类开始运行!endl; void Stop() cout 车 vehicle 类停止运行!endl; ;class bicycle: virtual public vehicle / 自行车类:公有继承虚基类vehicleprotected :int Height; / 高度;class motorcar: virtual public vehicle /汽车类:公有继承虚基类vehicleprotected :int SeatNum; / 座

12、位数;class motorcycle:public bicycle, public motorcar /摩托车类:公有继承自行车类和汽车类 public:void Setdata( int ms, int wt, int ht, int sn) MaxSpeed=ms; Weight=wt; Height=ht; SeatNum=s n; ;void Show()cout 最大速度:MaxSpeed 重量:Weight 高度:Height 座位数:SeatNumendl;void mai n()cout int 类型占用字节数: sizeof(int)endl;cout vehicle 占用

13、字节数: sizeof (vehicle)endl;cout bicycle 占用字节数: sizeof (bicycle)endl;cout motorcar 占用字节数: sizeof (motorcar)endl;cout motorcycle 占用字节数 : sizeof (motorcycle) 已启动生成:工程:cpp, 配置:Debug Win321生成启动时间为 2022-2-18 11:23:32。1l nitializeBuildStatus:1 正在创立,因为已指定AlwaysCreate 。1CICompile:对MaxSpeed的访问不明确 中中对Weight 的访问

14、不明确中中对MaxSpeed的访问不明确 中中对Weight 的访问不明确可能是Weight 位于基vehicle 中1f:projectscppcppma in. cpp(27): error C2385:1可能是MaxSpeed (位于基vehicle 1也可能是MaxSpeed(位于基vehicle1f:projectscppcppma in. cpp(27): error C2385:1可能是Weight (位于基vehicle 1也可能是“ Weight(位于基“1f:projectscppcppma in. cpp(29): error C2385: 1可能是MaxSpeed (位

15、于基1也可能是MaxSpeed(位于基1f:projectscppcppma in. cpp(30): error C2385: 1vehiclevehiclevehicle1也可能是Weight (位于基vehicle 中)1f:projectscppcppmain.cpp(42): error C2385:对Rur 的访问不明确1可能是Rur(位于基vehicle 中)1也可能是Run(位于基vehicle 中)1f:projectscppcppmain.cpp(42): error C3861:“ Run:找不到标识符1f:projectscppcppmain.cpp(45): erro

16、r C2385:对Stop 的访问不明确1可能是Stop (位于基vehicle 中)1也可能是Stop (位于基vehicle 中)1f:projectscppcppmain.cpp(45): error C3861:“ Stop :找不到标识符11生成失败。1=生成:成功0 个,失败1个,最新 0 个,跳过0 个=(2)指明继承路径程序及运行结果将vehicle中数据成员和函数成员指明路径。#in clude using namespace std;class vehicle /车类,作为基类protected :int MaxSpeed,Weight; / 最大速度,重量public :

17、void Run() cout 车 vehicle 类开始运行!endl; void Stop() cout车 vehicle 类停止运行!endl; ;class bicycle: public vehicle / 自行车类:公有继承虚基类vehicleprotected :int Height; / 高度;class motorcar: public vehicle /汽车类:公有继承虚基类vehicleprotected :int SeatNum; / 座位数;class motorcycle:public bicycle, public motorcar /摩托车类:公有继承自行车类和

18、汽车类public :void Setdatabicycle( int ms, int wt, int ht, int sn)bicycle:MaxSpeed=ms; bicycle:Weight=wt; / 修改,指明路径Height=ht; SeatNum=s n;void Showbicycle()cout 最大速度:bicycle:MaxSpeed 重量:bicycle:Weight 高度:Height 座位数:SeatNumendl;/ 修改,指明路径;void mai n()cout int 类型占用字节数: sizeof(int)endl;cout vehicle 占用字节数:

19、sizeof (vehicle)endl;cout bicycle 占用字节数: sizeof (bicycle)endl;cout motorcar 占用字节数: sizeof (motorcar)endl;cout motorcycle 占用字节数 : sizeof (motorcycle)endl;motorcycle mt;mt.bicycle:Ru n();/ 修改,指明路径mt.Setdatabicycle(100,200,130,2);mt.Showbicycle();mt.motorcar:Stop(); / 修改,指明路径4iM艾型占用T至曼 rehic In占.用主卫堇一

20、iytle占年三P数:12 utorcar 占用字 pfe: 12 皿片叱X占用子节珈24 -讥比类幵始运口大速度乂 10重里;200 鬧h让“兴停止运刊 按任意撬哑续座位短2c:ios6. 以实验6中的people人员类为基类,派生相应的类按任务7_4的要求编写程序,并运行。参考的运行结果:c:1 C TIWD0S sy st en32cdL eze2dA务张山编号;1001 曜儀脅華着口* 15 昌粉迅号* 151 PA1班弓】20L0A.数学师:名王武号:2W1七生巳崩年月FD,19*5 身份证号:196565I10 1飞一蘊教博上生的信息:号 1 1001生別鬥出生百瓯 -9M年10月

21、汩身囹证号 19851061班号aOLB並:数学号;2001腰成:lKSE月E日程序及运行结果:Iab6_7.h : People人员类的声明及成员函数的实现#in elude #in elude using namespaee std;class Dateprivate :int yy,mm,dd;public :Date() Date(Date &d) : yy(d.yy),mm(d.mm),dd(d.dd)/ 增添Date() int Getyy() const return yy; int Getmm() const return mm; int Getdd()constreturn

22、dd; void Setyy( int y) yy=y; void Setmm( int m) mm=m; void Setdd( int d) dd=d; ;class Peopleprivate :char name11;/,增添char number7;/编号,改为数组char sex3;/男或女,改为数组Date birthday;/ 出生日期char id16;/身份证号,改为数组public :People()People(People &p);People()void Getname( char na) strcpy(na,name); void Getnumber( char

23、nu) strcpy(nu,number); void Getsex( char se)strcpy(se,sex); int Getbirthyy() con st retur n birthday.Getyy(); int Getbirthmm() con st return birthday.Getmm(); int Getbirthdd() con st return birthday.Getdd(); void Getid( char d) strcpy(d,id); void Setname( char na) strcpy(name,na); void Setnumber( ch

24、ar nu) strcpy(number,nu); void Setsex( char se)strcpy(sex,se); void Setbirthyy( int y) birthday.Setyy(y); void Setbirthmm( int m) birthday.Setmm(m); void Setbirthdd( int d) birthday.Setdd(d); void Setid( char d) strcpy(id,d); void in put();void output();People:People(People &p):birthday(p.birthday)s

25、trcpy( name,p. name); strcpy(number ,p.number); strcpy(sex,p.sex);strcpy(id,p.id);inline void People:input()cout : ; cinname;cout 编号:;cinnumber;coutsex;cout md;Setbirthyy(y); Setbirthmm(m); Setbirthdd(d);coutid;inline void People:output()cout : namen 编号:numberendl;cout 性别:sexendl;cout 出生日期:Getbirthy

26、y()年Getbirthmm() 月Getbirthdd() 日endl;cout 身份证号:idendl;(2) Iab7_4.h : People 类的派生类#i nclude lab6_7.hclass student: virtual public People / 学生类private :char classNo7; / 班号public :stude nt()student(student &st):People(st) strcpy(classNo,st.classNo); / 使用类型兼容规那么stude nt()void GetclassNo( char cNo) strcp

27、y(cNo,classNo); void SetclassNo( char *c) strcpy(classNo,c); void in put() People:i nput(); coutclassNo; void output() People:output(); cout 班号:classNoe ndl; ;class teacher: virtual public People / 教师类private :char prin cipalship11; / 职务char departme nt21;/ 部门public :teacher()teacher(teacher &t):Peo

28、ple(t)strcpy(pri ncipalship,t.pri ncipalship);strcpy(departme nt,t.departme nt);teacher()void Getprincipalship( char *pri) strcpy(pri,principalship); void Getdepartment( char *dep) strcpy(dep,department); void Setprincipalship( char *pri) strcpy(principalship,pri); void Setdepartment( char *dep) str

29、cpy(department,dep); void in put() People:i nput();coutprincipalship;cout department;void output()People:output();cout 职务:principalshipendl;cout 部门:departmentendl;class graduate: public student / 研究生类private :char subject21; / 专业teacher adviser; / 导师public :graduate()graduate(graduate &g):stude nt(g

30、),adviser(g.adviser) strcpy(subject,g.subject); graduate()void GetSubject( char* sb) strcpy(sb,subject); void Getadviser(teacher &ad)char na11; adviser .Getname(na); ad.Setname(na);char nb7; adviser .Getnumber(nb); ad.Setnumber(nb);char se3; adviser .Getsex(se); ad.Setsex(se);ad.Setbirthyy(adviser .

31、Getbirthyy();ad.Setbirthmm(adviser .Getbirthmm();ad.Setbirthdd(adviser .Getbirthdd();char id016; adviser .Getid(id0); ad.Setid(id0);char pp11; adviser .Getprincipalship(pp); ad.Setprincipalship(pp);char dp21; adviser .Getdepartment(dp); ad.Setdepartment(dp);void SetSubject( char* sb) strcpy(subject,sb); void Setadviser(teacher &ad)char n a11; ad.Get name (n a); adviser .Set name( na);char n b7; ad.Get nu mber( nb); adviser.Set nu mber( nb);char se3; ad.Getsex(se); adviser .Setsex(se);adviser .Setbirthyy(ad.Getbirthyy();adviser .Setbirthmm(a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论