C++上机实验报告实验五.docx

上传人:jian****018 文档编号:8919069 上传时间:2020-04-01 格式:DOCX 页数:7 大小:313.81KB
返回 下载 相关 举报
C++上机实验报告实验五.docx_第1页
第1页 / 共7页
C++上机实验报告实验五.docx_第2页
第2页 / 共7页
C++上机实验报告实验五.docx_第3页
第3页 / 共7页
点击查看更多>>
资源描述
实验五 继承与派生1. 实验目的 1.学习定义和使用类的继承关系,定义派生类 2.熟悉不同继承方式下对基类成员的访问控制 3.学习利用虚基类解决二义性问题 2. 实验要求 1.定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程尝试。 2.定义一个基类BaseClass,有整型变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。 3.定义一个车(vehicle)基类,具有Maxspeed、Weight等成员,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNun)等属性。从bicycle和motorcar派生出摩托车(motorbicycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程尝试。 3. 实验内容及实验步骤1.编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示: error C2248 : age : cannot access private member declared in class Animal error C2248 : age : cannot access private member declared in class 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设置为虚基类,会出现二义性错误,程序不能成功编译。4. 思考题 1.如何在已有的类的基础上设计新的类? 采用类的派生的方法,利用基类派生出子类,子类继承基类的属性,从而在已有基类的基础上设计新的派生类,模式如下:class 派生类名:继承方式 基类名1,继承方式 基类名2,继承方式 基类名n 派生类成员声明;2.基类和派生类对象的构造顺序是怎样的?先调用基类的构造函数,然后再调用内嵌对象(派生类中的对象)的构造函数。基类构造函数的调用顺序是按照派生类定义时的顺序,而内嵌对象的构造函数调用顺序是按照成员在类中声明的顺序。 3.如何利用虚基类解决二义性问题?将共同基类设置为虚基类,语法为:class 派生类名:virtual 继承方式 基类名5. 源程序Lab7_1.cpp#includeusing namespace std;class Animal/Animal类/*private:int age;*/public:int age;Animal()Animal()Animal(int );class Dog:public Animal/Dog类,Animal的公有派生类private:int number;public:Dog()Dog()Dog(int,int);void setAge(int );void showNumber();void showAge();Animal:Animal(int a)/Animal构造函数age=a;Dog:Dog(int n,int a)/Dog构造函数number=n;age=a;void Dog:setAge(int n)/Dog成员函数,setAgeage=n;/数据输出函数void Dog:showNumber()coutNumber:numberendl;void Dog:showAge()coutAge:ageendl;int main()Dog dog1(12,0);dog1.setAge(7);dog1.showNumber();dog1.showAge();return 0;Lab_2#includeusing namespace std;class BaseClassprivate:int grade;int population;public:BaseClass(int g,int p)/BaseClass的构造函数grade=g;population=p;coutconstructing BaseClassendl;BaseClass()/析构coutdestructing BaseClassendl;class DerivedClass:public BaseClassprivate:char name;public:DerivedClass(int g,int p,char n):BaseClass(g,p)/DerivedClass的构造函数name=n;coutconstructing DerivedClassendl;DerivedClass()coutdestructing DerivedClassendl;int main()DerivedClass a(7,55,A);return 0;Lab_3#includeusing namespace std;class Vehiclepublic:float maxspeed;float weight;Vehicle()Vehicle(float m,float w)maxspeed=m;weight=w;Vehicle()void run()coutVehicle runningendl;void stop()coutVehicle stoppingendl;class Bicycle:virtual public Vehiclepublic:float height;Bicycle(float m,float w,float h):Vehicle(m,w)height=h;Bicycle(float h)height=h;Bicycle();class Motorcar:virtual public Vehiclepublic:int seatnum;Motorcar(float m,float w,int s):Vehicle(m,w)seatnum=s;Motorcar()Motorcar(float s)seatnum=s;class Motorbicycle:public Bicycle,public Motorcarpublic:Motorbicycle(float m,float w,float h,int s):Vehicle(m,w),Bicycle(h),Motorcar(s)void showInformation()coutThe maxspeed of this motorbicycle is:maxspeedendl;coutThe weight of this motorbicycle is:weightendl;coutThe height of this motorbicycle is:heightendl;coutThe seatnumber of this motorbicycle is:seatnumendl;int main()Motorbicycle a(60,21.5,45.8,2);a.run();a.showInformation();a.stop();return 0;6. 运行结果 Lab7_1age 为Animal的私有成员数据时:编译报错age 为Animal的公有成员数据时:正常运行Lab_2Lab_37. 心得体会:熟悉并了解了如果利用基类进行派生,得到派生类,明白了public,protect,private三种派生类型的区别,能够较好的利用继承的方法,来创建新的子类。并且学习了使用虚基类继承的方式,使基类中的成员对象仅被创建一次,收获颇多。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!