第三次上机报告_第1页
第三次上机报告_第2页
第三次上机报告_第3页
第三次上机报告_第4页
第三次上机报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

学号:姓名:班级:软件工程141继承与派生(4学时)一、实验目的1.学习定义和使用类的继承关系,定义派生类。2.熟悉不同继承方式下对基类成员的访问控制。3.学习利用虚基类解决二义性问题。二、实验任务1.定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(intn)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。2.定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。3.分析并调试以下程序运行结果,并和实际运行结果相对照。#include<iostream>usingnamespacestd;classBase{ intx;public: Base(inti) { x=i; cout<<"ConstuctorofBase"<<endl; } ~Base(){ cout<<"DestuctorofBase"<<endl; } voidshow() { cout<<"x="<<x<<endl; }};classDerived:publicBase{ Based;public: Derived(inti):Base(i),d(i)};intmain(){ Derivedobj(5); obj.show(); return0;}4.定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类。在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。5.设计people(人员)类,考虑到通用性,抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。派生出student(学生)类,添加属性:班号charclassNO[7];从people类派生出teacher(教师)类,添加属性:职务charprincipalship[11]、部门chardepartmentE21]。从student类中派生出graduate(研究生)类,添加属性:专业charsubject[21]、导师teacheradviser;从graduate类和teacher类派生出TA(助教生)类,注意虚基类的使用。重载相应的成员函数,测试这些类。三、实验步骤1.若将age设置为私有成员,在其派生类中直接给其赋值,会出现错误提示:将age设置为公有成员时,能正常运行代码:#include<iostream>usingnamespacestd;classAnimal{public:intage;};classdog:publicAnimal{public:intsetAge(intn)}运行结果为:2.执行情况为:(1)基类BaseClass的构造函数;(2)派生类DerivedClass的构造函数;(3)派生类DerivedClass的析取函数;(4)基类BaseClass的析取函数;代码:#include<iostream>usingnamespacestd;classBaseClass{public:BaseClass(){Number=90;cout<<"constructorofBaseClass!"<<endl;}~BaseClass(){cout<<"destructorofBaseClass!"<<endl;}private:intNumber;};classDerivedClass:publicBaseClass{public:DerivedClass(){cout<<"constrctorofDerivedClass!"<<endl;}~DerivedClass(){ cout<<"destructorofDerivedClass!"<<endl;}};intmain(){return0;}执行结果:3.分析:(1)执行Base的构造函数;(2)执行Derived的对象obj的Base类构造函数,并将obj(5)中参数5赋值给X及Derived类构造函数;(3)执行Derived类的对象obj的Derived的析取函数、在执行Derived类的obj的Base析取函数,最后执行与第一步相对应的Base的析取函数;执行结果:4.虚基类:使得在继承间接共同基类时只保留一份成员。若不使用虚基类,在最终的派生类中会保留该间接共同基类数据成员的多份同名成员。代码:#include<iostream>usingnamespacestd;classvehicle{public: vehicle(floatm,floatw) { MaxSpeed=m;Weight=w; } ~vehicle(){} voidrun() { cout<<"runningofvehicle!"<<endl; } voidstop() { cout<<"stoppingofvehicle!"<<endl; }floatMaxSpeed; floatWeight;};classbicycle:virtualpublicvehicle{public: bicycle(floatm,floatw,floath):vehicle(m,w) { Height=h; } ~bicycle(){} { SeatNum=s; } ~motorcar(){} intSeatNum;};classmotorcycle:publicbicycle,publicmotorcar{public: motorcycle(floatm,floatw,floath,ints):vehicle(m,w),bicycle(m,w,h),motorcar(m,w,s){} ~motorcycle(){} voiddisplay() {cout<<"MaxSpeed="<<MaxSpeed<<endl; cout<<"Weight="<<Weight<<endl; cout<<"Height="<<Height<<endl; cout<<"SeatNum="<<SeatNum<<endl; }};voidmain(){ floatm,w,h; ints; cout<<"pleaseinput\nMaxSpeed="; cin>>m; cout<<"Weight="; cin>>w; cout<<"Height="; cin>>h; cout<<"SeatNum="; cin>>s; motorcyclemoc(m,w,h,s); moc.display();}运行结果:5.代码:#include<iostream>#include<string> }; ~People(){}protected: stringnumber; stringsex; stringbirthday; stringid;};classStudent:virtualpublicPeople{public: Student(stringn,strings,stringb,stringi,stringc):People(n,s,b,i) { classNo=c; } ~Student(){}protected:stringclassNo;};classTeacher:virtualpublicPeople{public: Teacher(stringn,strings,stringb,stringi,stringp,stringd):People(n,s,b,i) { principalship=p; department=d; } ~Teacher(){}protected: stringprincipalship;//职务 stringdepartment;//部门};classGraduate:publicStudent } ~Graduate(){}protected: stringsubject;//专业 stringteacher_adviser;//导师};classTA:publicGraduate,publicTeacher{public: TA(stringn,strings,stringb,stringi,stringc,stringsu,stringt,stringp,stringd):People(n,s,b,i),Graduate(n,s,b,i,c,su,t),Teacher(n,s,b,i,p,d) {} ~TA(){} voiddisplay() { cout<<"编号:"<<number<<endl; cout<<"性别:"<<sex<<endl; cout<<"生日:"<<birthday<<endl; cout<<"身份证号:"<<id<<endl; cout<<"班级:"<<classNo<<endl; cout<<"专业:"<<subject<<endl; cout<<"导师:"<<teacher_adviser<<endl; cout<<"导师职务:"<<principalship<<endl; cout<<"导师部门:"<<department<<endl; }};voidmain(){ stringn,s,b,i,c,su,t,p,d; cout<<"请输入编号:"<<endl;cin>>n; cout<<"请输入性别:"<<endl;cin>>s; cout<<"请输入生日:"<<endl;cin>>b; cout<<"请输入身份证号:"<<endl;cin>>i; cout<<"请输入班级:"<<endl;cin>>c; cout<<"请输入专业:"<<endl;cin>>su; cout<<"请输入导师:"<<endl;cin>>t; cou

温馨提示

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

评论

0/150

提交评论