实验二派生类与继承一、实验目的1)掌握派生类的声明方法和派生类构造函数的定义方法:2)掌握不同继承方式下,基类成员在派生类中的访间属性;3)掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则;4)学习虚基类在解决二义性间题中的作用。实验内容和步骤二、1、输入下列程序题目1:#include<iostrean>using nanespace std;class Base1public:uoid setx(int i)tx = i;)int getx()kreturn x;)public:int x;;Derived:public Baseclass1public:void sety(int i)ky = i;)int gety()(return y;)void show()1cout<<"Base::x="<<x<<endl;>public:int y;7;int nain()1Derived bb;bb.setx(16);bb.sety(25);bb.show();cout<<"Base::x="<<bb.x<<endl;cout<<"Derived::y="<<bb.y<<endl;cout<<"Base::x="<<bb.getx()<<endl;cout<<"Derived::y-"<<bb.gety()<<endl;return ;710
10 实验二 派生类与继承 一、实验目的 1)掌握派生类的声明方法和派生类构造函数的定义方法; 2)掌握不同继承方式下,基类成员在派生类中的访问属性; 3)掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则; 4)学习虚基类在解决二义性问题中的作用。 二、实验内容和步骤 1、输入下列程序 题目 1:
(1)写出程序的运行结果。(2)按以下要求,对程序进行修改后再调试,指出调试中出错的原因。①将基类Base中数据成员x的访问权限改为private时,会出现哪些错误?为什么?②将基类Base中数据成员x的访间权限改为protected时,会出现哪些错误?为什么?③在源程序的基础上,将派生类Derived的继承方式改为private时,会出现哪些错误?为什么?在源程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误?为什么?题目2:编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。[提示]供参考的类结构如下:ciass Person<3;class Student:public Person<;classTeacher:public Person<3;题目3:按要求阅读、编辑、编译、调试和运行以下程序。(1)阅读、编辑、编译、调试和运行以下程序,并写出程序的运行结果。#include<iostrean>using nanespace std;class MyArraypublic:MyArray(int leng);~MyArray();void Input();voidDisplay(string);protected:int *alist;int length;1;1I
11 (1)写出程序的运行结果。 (2)按以下要求,对程序进行修改后再调试,指出调试中出错的原因。 ① 将基类 Base 中数据成员 x 的访问权限改为 private 时,会出现哪些错误?为什么? ② 将基类 Base 中数据成员 x 的访问权限改为 protected 时,会出现哪些错误?为什么? ③在源程序的基础上,将派生类 Derived 的继承方式改为 private 时,会出现哪些错误?为什么? ④在源程序的基础上,将派生类 Derived 的继承方式改为 protected 时,会出现哪些错误?为什么? 题目 2:编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、 系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性 别、年龄的输入和显示设计成一个类 Person,并作为学生类 Student 和教师类 Teacher 的基 类。 [提示] 供参考的类结构如下: 题目 3:按要求阅读、编辑、编译、调试和运行以下程序。 (1)阅读、编辑、编译、调试和运行以下程序,并写出程序的运行结果
MyArray::MyArray(int leng)Kif(leng<=0)1cout<<"error length";exit(1);>alist = new int[leng];length - leng;if(alist==NULL)1cout<<"assign failure";exit(1);Acout<<"MyArray类对象已创建。"<<endl;MyArray::"MyArraydeleterl alist;cout<<"MyArray类对象被撤销。"<<endl;uoid MyArray::Display(string str)int i;int *p=alist;cout<<str<<length<<"个整数:";2for(i=o;i<length;i++,p++)Lcout<<*p<<"1cout<<endl;uoid MyArray::Input()Kcout<<"请键盘输入"<<length<<"个整数:";int i;int*palist;for(i-0;i<length;i++,p++)1cin>>*p;3int nain()VMyArray a(5);a.Input();a.Display("显示已输入的");return o;12
12
(2)声明一个类SortArray继承类MyArray,在该类中定义一个函数,具有将输入的整数从小到大进行排序的功能。[提示]供参考的类结构如下:在第(1)步的基础上可增加下面的参考框架:class SortArray:public MyarraySpublic:uoid Sort();SortArray(int leng):MyArray(leng)1cout<<"SortArray类对象已创建。"<<endl;>uirtual ~SortArray();;SortArray::~SortArray()1cout<<"SortArray类对象被撤销。"<<endl;7uoid SortArray::Sort()1/请自行编写Sort函数的代码,将输入的整数从小到大排序。1/并将主函数修改为:int main()SortArray a(5);s.Input();s.Display("显示排序以前的");s.Sort();s.Display"显示排序以后的");return o;7声明一个类ReArray继承类MyArray,在该类中定义一个函数,具有将输入的整数进行倒置的功能。[提示]在第(1)步的基础上可增加下面的参考框架:class ReArray:public MyArray<public:void reverse();ReArray(int leng);Uirtual ~ReArray();1;请读者自行编写构造函数、析构函数和倒置函数ReArray,以及修改主函数。13
13 (2)声明一个类 SortArray 继承类 MyArray,在该类中定义一个函数,具有将输入的整数从小到大进行排序的 功能。 [提示] 供参考的类结构如下: 在第(1)步的基础上可增加下面的参考框架: 声明一个类 ReArray 继承类 MyArray,在该类中定义一个函数,具有将输入的整数进行倒置的功能。 [提示] 在第(1)步的基础上可增加下面的参考框架: 请读者自行编写构造函数、析构函数和倒置函数 ReArray,以及修改主函数
(3)声明一个类AverArray继承类MyArray,在该类中定义一个函数,具有求输入的整数平均值的功能。[提示]在第(1)步的基础上可增加下面的参考框架:class AuerArray:public MyArray1public:AerArray(int leng);~AuerArray();double Aver();7;请读者自行编写构造函数、析构函数和求平均值函数Aver(求解整数的平均值),以及修改主函数。14
14 (3)声明一个类 AverArray 继承类 MyArray,在该类中定义一个函数,具有求输入的整数平均值的功能。 [提示] 在第(1)步的基础上可增加下面的参考框架: 请读者自行编写构造函数、析构函数和求平均值函数 Aver(求解整数的平均值),以及修改主函数