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

下载本文档

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

文档简介

C++上机实验报告-实验五1/2C++上机实验报告-实验五全文共6页,当前为第1页。实验五继承与派生C++上机实验报告-实验五全文共6页,当前为第1页。实验目的1.学习定义和使用类的继承关系,定义派生类2.熟悉不同继承方式下对基类成员的访问控制3.学习利用虚基类解决二义性问题实验要求1.定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge〔intn〕中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程尝试.2.定义一个基类BaseClass,有整型变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况.3.定义一个车〔vehicle〕基类,具有Maxspeed、Weight等成员,Run、Stop等成员函数,由此派生出自行车〔bicycle〕类、汽车〔motorcar〕类.自行车〔bicycle〕类有高度〔Height〕等属性,汽车〔motorcar〕类有座位数〔SeatNun〕等属性.从bicycle和motorcar派生出摩托车〔motorbicycle〕类,在继承过程中,注意把vehicle设置为虚基类.如果不把vehicle设置为虚基类,会有什么问题?编程尝试.实验内容与实验步骤1.编写程序定义基类Animal,成员变量age定义为私有的.构造派生类dog,在其成员函数SetAge〔intn〕中直接对age赋值时,会出现类似以下的错误提示:errorC2248:‘age’:cannotaccessprivatememberdeclaredinclass‘Animal’errorC2248:‘age’:cannotaccessprivatememberdeclaredinclass‘Animal’把age改为公有成员变量后重新编译就可以了.程序名:lab7_1.cpp.2.编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况.程序名:lab7_2.cpp.3.用debug功能跟踪程序lab7_2的执行过程,观察基类和派生类的构造函数和析构函数的执行情况.4.编写程序定义一个车〔vehicle〕基类,由此派生出自行车〔bicycle〕类、汽车〔motorcar〕类,注意把vehicle派生为虚基类.再从bicycle和motorcar派生出摩托车〔motorcycle〕类,在main<>函数中测试这个类.程序名:lab7_3.cpp.编译成功后,把vehicle设置为非虚基类,再编译一次,此时系统报错,无法编译成功.这是因为若不把vehicle设置为虚基类,会出现二义性错误,程序不能成功编译.思考题1.如何在已有的类的基础上设计新的类?采用类的派生的方法,利用基类派生出子类,子类继承基类的属性,从而在已有基类的基础上设计新的派生类,模式如下:class派生类名:继承方式基类名1,继承方式基类名2,…,继承方式基类名n{派生类成员声明;};2.基类和派生类对象的构造顺序是怎样的?先调用基类的构造函数,然后再调用内嵌对象〔派生类中的对象〕的构造函数.基类构造函数的调用顺序是按照派生类定义时的顺序,而内嵌对象的构造函数调用顺序是按照成员在类中声明的顺序.C++上机实验报告-实验五全文共6页,当前为第2页。3.如何利用虚基类解决二义性问题?C++上机实验报告-实验五全文共6页,当前为第2页。将共同基类设置为虚基类,语法为:class派生类名:virtual继承方式基类名源程序Lab7_1.cpp#include<iostream>usingnamespacestd;classAnimal//Animal类{/*private:intage;*/public:intage;Animal<>{} ~Animal<>{}Animal<int>;};classDog:publicAnimal//Dog类,Animal的公有派生类{private:intnumber;public:Dog<>{} ~Dog<>{}Dog<int,int>;voidsetAge<int>;voidshowNumber<>;voidshowAge<>;};Animal::Animal<inta>//Animal构造函数{age=a;}Dog::Dog<intn,inta>//Dog构造函数{number=n;age=a;}voidDog::setAge<intn>//Dog成员函数,setAge{age=n;}//数据输出函数voidDog::showNumber<>C++上机实验报告-实验五全文共6页,当前为第3页。{C++上机实验报告-实验五全文共6页,当前为第3页。cout<<"Number:"<<number<<endl;}voidDog::showAge<>{cout<<"Age:"<<age<<endl;}intmain<>{ Dogdog1<12,0>;dog1.setAge<7>;dog1.showNumber<>;dog1.showAge<>;return0;}Lab_2#include<iostream>usingnamespacestd;classBaseClass{private:intgrade;intpopulation;public:BaseClass<intg,intp>//BaseClass的构造函数 {grade=g;population=p;cout<<"constructingBaseClass"<<endl; } ~BaseClass<>//析构 {cout<<"destructingBaseClass"<<endl; }};classDerivedClass:publicBaseClass{private:charname;public:DerivedClass<intg,intp,charn>:BaseClass<g,p>//DerivedClass的构造函数 {name=n;cout<<"constructingDerivedClass"<<endl;C++上机实验报告-实验五全文共6页,当前为第4页。 }C++上机实验报告-实验五全文共6页,当前为第4页。 ~DerivedClass<> {cout<<"destructingDerivedClass"<<endl; }};intmain<>{DerivedClassa<7,55,'A'>;return0;}Lab_3#include<iostream>usingnamespacestd;classVehicle{public:floatmaxspeed;floatweight;Vehicle<>{}Vehicle<floatm,floatw> {maxspeed=m;weight=w; } ~Vehicle<>{}voidrun<> {cout<<"Vehiclerunning"<<endl; }voidstop<> {cout<<"Vehiclestopping"<<endl; }};classBicycle:virtualpublicVehicle{public:floatheight;Bicycle<floatm,floatw,floath>:Vehicle<m,w> {height=h; }Bicycle<floath>C++上机实验报告-实验五全文共6页,当前为第5页。 {C++上机实验报告-实验五全文共6页,当前为第5页。height=h; } ~Bicycle<>{}};classMotorcar:virtualpublicVehicle{public:intseatnum;Motorcar<floatm,floatw,ints>:Vehicle<m,w> {seatnum=s; } ~Motorcar<>{}Motorcar<floats> {seatnum=s; }};classMotorbicycle:publicBicycle,publicMotorcar{public:Motorbicycle<floatm,floatw,floath,ints>:Vehicle<m,w>,Bicycle<h>,Motorcar<s>{}voidshowInformation<> {cout<<"Themaxspeedofthismotorbicycleis:"<<maxspeed<<endl;cout<<"Theweightofthismotorbicycleis:"<<weight<<endl;cout<<"Theheightofthismotorbicycleis:"<<height<<endl;cout<<"Theseatnumberofthismotorbicycleis:"<<seatnum<<endl; }};intmain<>{Motorbicyclea<60,21.5,45.8,2>;a.run<>;a.showInformation<>;a.stop<>;return0;}运行结果Lab7_1age为Animal的私有成员数据时:编译报错

温馨提示

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

最新文档

评论

0/150

提交评论