您好,欢迎访问三七文档
实验2继承与派生实验课程名:面向对象程序设计(C++方向)专业班级:学号:姓名:实验时间:实验地点:指导教师:一、实验目的和要求(1)掌握派生类的声明方法和派生类构造函数的定义方法。(2)掌握不同继承方式下,基类成员在派生类中的访问属性。(3)掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则。(4)学习虚基类在解决二义性问题中的作用。二、实验内容1.输入下列程序。//test4_1.cpp#includeiostreamusingnamespacestd;classBase{public:voidsetx(inti){x=i;}Intgetx(){returnx;}public:intx;};classDerived:publicBase{public:voidsety(inti){y=i;}intgety(){returny;}voidshow(){cout”Base::x=”xendl;}public:inty;};intmain(){Derivedbb;bb,setx(16);bb.sety(25);bb.show();cout”Base::x=”bb.xendl;cout”Derived::y=”bb.yendl;cout”Base::x=”bb.getx()endl;cout”Derived::y=”bb.gety()endl;return0;}(1)写出程序的运行结果(2)按以下要求,对程序进行修改后再调试,指出调试中出错的原因。将基类Base中数据成员x的访问权限改为private时,会出现哪些错误?为什么?答:程序的cout”Base::x=”xendl;cout”Base::x=”bb.xendl;会出现错误;因为当x定义为私有时,公共继承的类的成员函数不可以访问,在类外也不可以访问。将基类Base中数据成员x的访问权限改为protected时,会出现哪些错误?为什么?答:程序的cout”Base::x=”bb.xendl;会出现错误。当x在基类中定义为保护时,公共继承的类内的成员函数是可以访问的,但在类外是不允许访问的。在源程序的基础上,将派生类Derived的继承方式改为private时,会出现哪些错误?为什么?答:程序的bb,setx(16);cout”Base::x=”bb.xendl;cout”Base::x=”bb.getx()endl;会出现错误。当使用私有继承时,基类的私有成员只有基类的成员函数可以引用,基类的私有成员在派生类中是不可访问的;私有基类的公共成员在派生类的成员函数可以访问,但在派生类外是不可以访问的。在源程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误?为什么?答:程序的bb,setx(16);cout”Base::x=”bb.xendl;cout”Base::x=”bb.getx()endl;会出现错误。当为保护继承时,基类的任何成员在类外是不允许访问的。2.编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。供参考的类结构如下:classPerson{...};classStudent:publicPerson{...};classTeacher:publicPerson{...};程序代码:#includeiostream#includestringusingnamespacestd;classPerson{public:voidinsert();voidout();private:intnumber;stringname;stringsex;intage;};voidPerson::insert(){cout请输入编号:;cinnumber;cout请输入姓名:;cinname;cout请输入性别:;cinsex;cout请输入年龄:;cinage;}voidPerson::out(){cout编号:numberendl姓名:nameendl性别:sexendl年龄:ageendl;}classStudent:publicPerson{public:voidinsert1();voidout1();private:stringdept;intscore;};voidStudent::insert1(){cout请输入系:;cindept;cout请输入成绩:;cinscore;}voidStudent::out1(){out();cout系:deptendl成绩:scoreendl;}classTeacher:publicPerson{public:voidinsert2();voidout2();private:stringzhicheng;stringbumen;};voidTeacher::insert2(){cout请输入职称:;cinzhicheng;cout请输入部门:;cinbumen;}voidTeacher::out2(){out();cout职称:zhichengendl部门:bumenendl;}intmain(){cout请输入一个学生的数据:endl;StudentA;A.insert();A.insert1();cout输入学生数据的信息为:;A.out1();coutendl;cout请输入一个老师的数据:endl;TeacherB;B.insert();B.insert2();cout输入老师数据的信息为:;B.out2();return0;}3.按要求阅读、编辑、编译、调试和运行以下程序。(1)阅读、编辑、编译、调试和运行以下程序,并写出程序的运行结果。//test4_3_1.cpp#includeiostream#includestringusingnamespacestd;classMyArray{public:MyArray(intleng);~MyArray{};voidInput();voidDisplay(string);protected:int*alist;intlength;};MyArray::MyArray(intleng){if(leng=0){cout”errorlength”;exit(1);}alist=newint[leng];length=leng;if(alist==NULL){cout”assignfailure”;exit(1);}cout”MyArray类对象已创建。”endl;}MyArray::~MyArray(){delete[]alist;cout”MyArray类对象被撤销。”endl;}voidMyArray::Display(stringstr){inti;int*p=alist;coutstrlength”个整数:“;for(i=0;ilength;i++,p++)cout*p””;coutendl;}voidMyArray::Input{}{cout”请键盘输入”length”个整数:”;inti;int*p=alist;for(i=0;ilength;i++,p++)cin*p;}intmain(){MyArraya(5);a.Input();a.Display(“显示已输入的”);return0;}修改后:#includeiostream#includestring#includealgorithmusingnamespacestd;classMyArray{public:MyArray(intleng);voidInput();voidDisplay(string);~MyArray();protected:int*alist;intlength;};MyArray::MyArray(intleng){if(leng=0){couterrorlength;exit(1);}alist=newint[leng];length=leng;if(alist==NULL){coutassignfailure;exit(1);}coutMyArray类对象已创建。endl;}MyArray::~MyArray(){delete[]alist;coutMyArray类对象被撤销。endl;}voidMyArray::Input(){cout请键盘输入length个整数:;inti;int*p=alist;for(i=0;ilength;i++,p++)cin*p;}voidMyArray::Display(stringstr){inti;int*p=alist;coutstrlength个整数:;for(i=0;ilength;i++,p++)cout*p;coutendl;}intmain(){MyArraya(5);a.Input();a.Display(“显示已输入的”);return0;}(2)声明一个类SortArray继承类MyArray,在该类中定义一个函数,具有将输入的整数从小到大进行排序的功能。【提示】在第(1)步的基础上可增加下面的参考框架:classSortArray:publicMyArray{public:voidSort();SortArray(intleng):MyArray(leng){cout”SortArray类对象已创建。”endl;}virtual~SortArray();};SortArray::~SortArray(){cout”SortArray类对象被撤销。”endl;}voidSortArray::Sort(){//请自行编写Sort函数的代码,将输入的整数从小到大排序。}//并将主函数修改为:intmain(){SortArraya(5);s.Input();s.Display(“显示排序以前的”);s.Sort();s.Display(“显示排序以后的”);return0;}程序代码:#includeiostream#includestring#includealgorithmusingnamespacestd;classMyArray{public:MyArray(intleng);voidInput();voidDisplay(string);~MyArray();protected:int*alist;intlength;};MyArray::MyArray(intleng){if(leng=0){couterrorlength;exit(1);}alist=newint[leng];length=leng;if(alist==NULL){coutassignfailure;exit(1);}coutMyArray类对象已创建。endl;}MyArray::~MyArray(){delete[]alist;coutMyArray类对象被撤销。endl;}voidMyArray::Input(){cout请键盘输入length个整数:;inti;int*p=alist;for(i=0;ilength;i++,p++)cin*p;}voidMyArray::Display(stringstr){inti;
本文标题:C++实验二
链接地址:https://www.777doc.com/doc-2901641 .html