C++上机实验报告_第1页
C++上机实验报告_第2页
C++上机实验报告_第3页
C++上机实验报告_第4页
C++上机实验报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、C+程序实验报告实验五 继承与派生实验目的1. 学习定义和使用 类的继承关系 , 定义派生类2. 熟悉不同继承方式下对基类成员的访问控制3. 学习利用 虚基类 解决二义性问题实验要求1. 定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge (intn)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程尝试。2. 定义一个基类BaseClass有整型变量 Number,构造其派生类DerivedClass,观察构造函数 和析构函数 的执行情况。3. 定义一个车(vehicle)基类,具有 Maxspeed、Weight

2、等成员,Run、Stop等成员函数,由 此派生出 自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height) 等属性,汽车(motorcar)类有座位数(SeatNun)等属性。从 bicycle和motorcar派生出摩 托车(motorbicycle)类,在继承过程中,注意 把vehicle设置为虚基类。如果不把 vehicle 设置为虚基类,会有什么问题?编程尝试。实验内容及实验步骤1.编写程序定义基类 Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge( intn)中直接对age赋值时,会出现类似以下的错误

3、提示:error C2248 :age : cannot access private member declared in classAnimalerror C2248 :age : cannot access private member declared in classAnimal把 age 改为公有成员变量后重新编译就可以了。程序名:lab7_1.cpp。错误代码:#includeusing namespace std;class Animalprivate:int age;public:Animal();class dog:public Animalpublic:void SetA

4、ge(int n)age=n;int mai n()dog one;on e.SetAge(23); return 0;运行结果:正确代码:#in clude using n amespace std; class An imal public: int age;public:An imal();class dog:public Animal public:void SetAge(i nt n) age=n;int mai n()dog one;on e.SetAge(23); return 0;运行结果:2.编写程序定义一个基类BaseClass构造其派生类DerivedClass,在构造函

5、数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。程序名:Iab7_2.cpp。源代码:#in cludeusing n amespace std;class BaseClassprivate: int a;public:BaseClass()cout基类构造函数调用e ndl;BaseClass()cout基类析构函数调用e ndl;class DerivedClass:public BaseClassprivate: int b;public:DerivedClass()cout派生类构造函数调用e ndl;;DerivedClass()cout派生类析构函数调用TI

6、ia虚3clais hriyriKlMSiiubklcgirjvjl-i!-: int ba publlt prLuMin|4f DirlwilE L“*3 JU imufL. *t Urnir. FiLJLDvrLurdUlaifitii umi(打“U Fii甬“ I3用debug功能跟踪程序Iab7_2的执行过程,观察基类和派生类的构造函数和析构函数的执 行情况。DEBUG:IJO. - lin-ar-afk Vajukl 亡H |bc-ixJc| 一 rT3UT3.LFl色O0 RIP口国僧厂t|P jbMrnrmbEF!rl m2礼-曲匹ft料屮越更栅百皱11用-収;沖*14讪4CH

7、1I 3圈吨析抽迈我调用mrnm :KC弓 t*Klve-vClir55;puii!i BikseCi-asSprlwtf-;int b:ipublic:UEuf4CIH bUM松戏生熨呦色函觀嗔霸 h:却int MlnOCDm* LuariC9jhh um ;因艾片砂 Am ty.i 帕逗且豊遇0aa命讯勺弓”II1,-1=1 吨 v |4* 1 鼻! 4-:BwpCLjmGi = es?狹析抽还霰调.用PWnm:155 tfi-Ive-vGIms iiubbic BfCUis IlWJlfc F :int b:i public:1l=M 曲探生史曲苣函诜囊Ifl叫S ;FidwvtKLEE

8、lDw LuadCB Jhh. unv rrtur* 軟;h cnitItaVUI/l-tjrF3 td :n|irriilnr4 rf-. .卜Jejjbri =h*1 r nuri:a f . . ?.“!!切 上1:“ 1 uhaz /.口申”UJ”(JrwfTiP him口口 c*ra - ijirbutLrrtur* li4.编写程序定义一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车(motorcar) 类,注意把vehicle派生为虚基类。再从bicycle和motorcar派生出摩托车 (motorcycle)类, 在main()函数中测试这个类。程序名

9、 :lab7_3.cpp。编译成功后,把vehicle设置为非虚基类,再编译一次,此时系统报错,无法编译成功。这 是因为若不把vehicle设置为虚基类,会出现二义性错误,程序不能成功编译。源代码: #in clude using n amespace std; class Vehiclepublic:Vehicle();int a; void set() coutVehicle 调用 endl;class Mortorcar:virtual public Vehicle public:Mortorcar();int b; void set() coutMortorcar 调用 endl;cl

10、ass Bicycle:virtual public Vehiclepublic:Bicycle();int c;void set()coutBicycle 调用 endl;class Mortorcycle:public Mortorcar,public Bicycle public:Mortorcycle();int d; void set() coutMortorcycle 调用 !( *as:i xtfii? inai)- zUiai raw占h尙魁吕Mi鈕jgiHi币epublLt:UrhLrlrOIF void mcQ 辰itM “叱hid沖1用弋强Ml j.cl itim Hnr

11、l-qrcjrzu I rhial pflihl un ivhicl-t(publlcxjrtnrflr |iQ f19W H.rpslF;VElrtiMl fubliF UHbilcCfublLt:BityrlcIHI-icldibh liurCarEj|u3! paU Lu HjrLurcrirnpub*Llt UH止 MirLurEMcBvQO; void ntCPC匸HiZl”Harl:rryu:l审审用叫“idl ;F畀Ent MlnJCMirbnrT弾 11. M:错误情况:思考题1. 如何在已有的类的基础上设计新的类?派生一个新的类。2. 基类和派生类对象的构造顺序是怎样的?先调用基类的构造函

温馨提示

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

评论

0/150

提交评论