C语言程序设计实验答案继承与派生.pdf
《C语言程序设计实验答案继承与派生.pdf》由会员分享,可在线阅读,更多相关《C语言程序设计实验答案继承与派生.pdf(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验实验 0707 继承与派生(继承与派生(4 4 学时)学时)(第 7 章 继承与派生)一、实验目的一、实验目的(1)(1)学习声明和使用类的继承关系,声明派生类。学习声明和使用类的继承关系,声明派生类。(2)(2)熟悉不同继承方式下对基类成员的访问控制。熟悉不同继承方式下对基类成员的访问控制。(3)(3)学习运用虚基类解决二义性问题。学习运用虚基类解决二义性问题。二、实验任务二、实验任务7_17_1 声明一个基类声明一个基类 AnimalAnimal。有私有整型成员变量有私有整型成员变量 ageage,构造其派生类构造其派生类 dogdog,在其成员函数在其成员函数 SetAge(SetA
2、ge(intint n)n)中直接给中直接给 ageage赋值,看看会有什么问题,把赋值,看看会有什么问题,把ageage改为公有成员变量,还会有问题吗?编程试试看。改为公有成员变量,还会有问题吗?编程试试看。7_27_2 声明一个基类声明一个基类 BaseClassBaseClass。有整型成员变量有整型成员变量 NumberNumber,构造其派生类,构造其派生类DerivedClassDerivedClass,观测构造函数和析构函数的执,观测构造函数和析构函数的执行情况。行情况。7_37_3 声明一个车声明一个车(vehicle)(vehicle)基类。基类。具有具有 MaxSpeedM
3、axSpeed、WeightWeight 等成员变量,等成员变量,RunRun、StopStop等成员函数,等成员函数,由此派生出自行车由此派生出自行车(bicycle)(bicycle)类、汽车类、汽车(motorcar)(motorcar)类。自行车类。自行车(bicycle)(bicycle)类有高度类有高度(Height)(Height)等属性,汽车等属性,汽车(motorcar)(motorcar)类有座位类有座位数数(SeatNum)(SeatNum)等属性。从等属性。从 bicyclebicycle 和和 motorcarmotorcar派生出摩托车派生出摩托车(motorcyc
4、le)(motorcycle)类,在继承过程中,类,在继承过程中,注意把注意把 vehiclevehicle 设立为虚基类。设立为虚基类。假如不把假如不把 vehiclevehicle 设立为虚基类,设立为虚基类,会有什么问题?编程试试看。会有什么问题?编程试试看。7_47_4 以实验以实验 6 6 中的中的 PeoplePeople(人员)类为基类。(人员)类为基类。派生出派生出 studentstudent(学生)类,添加属性:班号(学生)类,添加属性:班号charchar classNo7 classNo7;派生出派生出 teacherteacher(教师)类,添加属性:职务(教师)类,
5、添加属性:职务charchar principalship11 principalship11、部门、部门 charchardepartment21department21。从从 studentstudent 类中派生出类中派生出 graduategraduate(研究生)类,添加属性:专业(研究生)类,添加属性:专业charchar subject21 subject21、导师、导师teacher adviserteacher adviser;从从 graduategraduate 类和类和 teacherteacher 类派生出类派生出 TATA(助教生)类,注意虚基类的使用。重载相应的(
6、助教生)类,注意虚基类的使用。重载相应的成员函数,测试这些类。成员函数,测试这些类。类之间的关系如图类之间的关系如图 7-17-1 所示。所示。人员人员姓名姓名编号编号性别性别日期日期年年月月学生学生班号班号教师教师职务职务研究生研究生专业专业助教博士生助教博士生图图 7-17-1 类图类图三、实验环节三、实验环节1.1.(编程)声明基类(编程)声明基类 AnimalAnimal,成员变量,成员变量 ageage 声明为私有的。声明为私有的。构造派生类构造派生类 dogdog,在其成员函数,在其成员函数SetAge(SetAge(intint n)n)中直接对中直接对 ageage 赋值时,会
7、出现类似以下的赋值时,会出现类似以下的错误提醒:错误提醒:(注:在桌面创建一个文本文献,将输出框的内容复制到文本文献中,再复制到(注:在桌面创建一个文本文献,将输出框的内容复制到文本文献中,再复制到WordWord文献中,不会出现汉字的乱码)文献中,不会出现汉字的乱码)用用 privateprivate 时的结果:时的结果:1-已启动生成:项目:cpp,配置:Debug Win32-1生成启动时间为 2023-2-18 11:10:35。1InitializeBuildStatus:1正在创建“Debugcpp.unsuccessfulbuild”,由于已指定“AlwaysCreate”。1C
8、lCompile:1 main.cpp1f:projectscppcppmain.cpp(13):error C2248:“Animal:age”:无法访问 private成员(在“Animal”类中声明)1 f:projectscppcppmain.cpp(8):参见“Animal:age”的声明1 f:projectscppcppmain.cpp(5):参见“Animal”的声明1f:projectscppcppmain.cpp(14):error C2248:“Animal:age”:无法访问 private成员(在“Animal”类中声明)1 f:projectscppcppmain.
9、cpp(8):参见“Animal:age”的声明1 f:projectscppcppmain.cpp(5):参见“Animal”的声明11生成失败。11已用时间 00:00:03.28=生成:成功 0 个,失败 1 个,最新 0 个,跳过 0 个=把把 ageage 改为公有变量后重新编译就可以了。程序名:改为公有变量后重新编译就可以了。程序名:lab7_1.cpplab7_1.cpp。程序及运营结果:程序及运营结果:/lab7_1.cpp#include using namespace std;class Animalprivate:/private 时犯错/public:/public 和
10、 protected 对的int age;class dog:public Animalpublic:void SetAge(int n)age=n;int GetAge()return age;void main()dog d;d.SetAge(3);coutAge=d.GetAge()-已启动生成:项目:cpp,配置:Debug Win32-1生成启动时间为 2023-2-18 11:10:35。1InitializeBuildStatus:1正在创建“Debugcpp.unsuccessfulbuild”,由于已指定“AlwaysCreate”。1ClCompile:1 main.cpp
11、1f:projectscppcppmain.cpp(13):error C2248:“Animal:age”:无法访问 private成员(在“Animal”类中声明)1 f:projectscppcppmain.cpp(8):参见“Animal:age”的声明1 f:projectscppcppmain.cpp(5):参见“Animal”的声明1f:projectscppcppmain.cpp(14):error C2248:“Animal:age”:无法访问 private成员(在“Animal”类中声明)1 f:projectscppcppmain.cpp(8):参见“Animal:ag
12、e”的声明1 f:projectscppcppmain.cpp(5):参见“Animal”的声明11生成失败。11已用时间 00:00:03.28=生成:成功 0 个,失败 1 个,最新 0 个,跳过 0 个=用用 publicpublic 时的结果:时的结果:2.2.(编程)声明一个基类(编程)声明一个基类 BaseClassBaseClass,构造其派生类,构造其派生类 DerivedClassDerivedClass。在构造函数和析构函数中用在构造函数和析构函数中用coutcout 输出提醒信息,输出提醒信息,观测构造函数和析构函数的执行情况。观测构造函数和析构函数的执行情况。程序名:程
13、序名:lab7_2.cpplab7_2.cpp。参考的运营结果:参考的运营结果:程序及运营结果:程序及运营结果:/lab7_2.cpp#include using namespace std;class BaseClasspublic:BaseClass()cout构造了一个 BaseClass 类的对象.endl;BaseClass()cout析构了一个 BaseClass 类的对象.endl;private:int Number;class DeriveClass:public BaseClasspublic:DeriveClass()cout构造了一个 DeriveClass 类的对象.
14、endl;DeriveClass()cout析构了一个 DeriveClass 类的对象.endl;void main()DeriveClass a;3.3.(操作)用调试功能跟踪程序(操作)用调试功能跟踪程序 lab7_2lab7_2 的执行过程。的执行过程。观测基类和派生类的构造函数和析构函数的执行情况。观测基类和派生类的构造函数和析构函数的执行情况。4.4.(编程)声明一个车(编程)声明一个车(vehicle)(vehicle)虚基类。虚基类。由此派生出自行车由此派生出自行车(bicycle)(bicycle)类、汽车类、汽车(motorcar)(motorcar)类,注意把类,注意把v
15、ehiclevehicle 派生为虚基类。再从派生为虚基类。再从bicyclebicycle 和和 motorcarmotorcar派生出摩托车派生出摩托车(motorcycle)(motorcycle)类,在类,在 main()main()函数中测试这个类。程序名:函数中测试这个类。程序名:lab7_3.cpplab7_3.cpp。参考的运营结果:参考的运营结果:程序及运营结果:程序及运营结果:/lab7_3.cpp#include using namespace std;class vehicle/车类,作为基类protected:int MaxSpeed,Weight;/最大速度,重量p
16、ublic:;class bicycle:virtual public vehicle/自行车类:公有继承虚基类vehicleprotected:;class motorcar:virtual public vehicle/汽车类:公有继承虚基类vehicleprotected:int SeatNum;/座位数int Height;/高度void Run()cout车 vehicle 类开始运营!endl;void Stop()cout车 vehicle 类停止运营!endl;class motorcycle:public bicycle,public motorcar/摩托车类:公有继承自行
17、车类和汽车类public:void Setdata(int ms,int wt,int ht,int sn)MaxSpeed=ms;Weight=wt;Height=ht;SeatNum=sn;void Show()cout最大速度:MaxSpeed重量:Weight高度:Height座位数:SeatNumendl;void main()coutint 类型占用字节数:sizeof(int)endl;coutvehicle 占用字节数:sizeof(vehicle)endl;coutbicycle 占用字节数:sizeof(bicycle)endl;coutmotorcar 占用字节数:siz
18、eof(motorcar)endl;coutmotorcycle 占用字节数:sizeof(motorcycle)-已启动生成:项目:cpp,配置:Debug Win32-1生成启动时间为 2023-2-18 11:23:32。1InitializeBuildStatus:1正在创建“Debugcpp.unsuccessfulbuild”,由于已指定“AlwaysCreate”。1ClCompile:1 main.cpp1f:projectscppcppmain.cpp(27):error C2385:对“MaxSpeed”的访问不明确1也许是“MaxSpeed”(位于基“vehicle”中)
19、1也也许是“MaxSpeed”(位于基“vehicle”中)1f:projectscppcppmain.cpp(27):error C2385:对“Weight”的访问不明确1也许是“Weight”(位于基“vehicle”中)1也也许是“Weight”(位于基“vehicle”中)1f:projectscppcppmain.cpp(29):error C2385:对“MaxSpeed”的访问不明确1也许是“MaxSpeed”(位于基“vehicle”中)1也也许是“MaxSpeed”(位于基“vehicle”中)1f:projectscppcppmain.cpp(30):error C238
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 实验 答案 继承 派生
限制150内