1内蒙古科技大学信息工程学院计算机系《面向对象程序设计》实验报告姓名张国强学号1667159127班级软件一班实验日期第16周(星期三)6月14日第一节项目号、实验名称实验8继承(一)实验要求(任课教师提供)一、实验目的1.理解继承的含义以及声明;2.理解共有派生、私有派生和保护派生的含义以及使用;3.理解单派生类中构造函数和析构函数的调用顺序。二、实验内容2.1练习(一):1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。#includeiostream.hclassCBase{public:CBase(inta):a(a){}protected:voidprint(){couta=aendl;}private:inta;2};classCDerive:publicCBase{public:voidprint(){CBase::print();coutb=bendl;}private:intb;};voidmain(){CDerived;d.print();CBaseb;b.print();}问题一:以上程序有两大错误,试指出来,并改正之?2.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。#includeiostream.hclassCBase{public:CBase(inta):a(a)3{coutbasestructureendl;}~CBase(){coutbasedestructureendl;}voidprint(){couta=aendl;}protected:inta;};classCDerive:publicCBase{public:CDerive(inta,intb,intc):CBase(a),b(b),c(c){coutderivestructureendl;}~CDerive(){coutderivedestructureendl;}voidprint(){CBase::print();4coutb.a=b.aendl;coutc=cendl;}private:CBaseb;intc;};voidmain(){CDerived(1,2,3);-----------------------------------------------------①d.print();}问题一:以上程序的输出结果是什么,说明为什么?问题二:①处语句执行完后,d.b.a的值为多少?2.2练习(二):1.定义点CPoint类作为基类,在此基础上派生出直线CLine类和圆CCircle类,并要求基类和各派生类具有以下特点:a.CLine类含有计算直线长度和斜率的成员函数;b.CCircle类含有计算圆面积的成员函数。5实验内容(由学生填写)实验一:错误一:没有声明派生类的构造函数,以至于不能对基类的数据成员初始化。错误二:访问限定符为保护,则不能在类外访问,只能在类内或派生类中访问。修改后代码如下所示:#includeiostreamusingnamespacestd;classCBase{public:CBase(inta):a(a){}voidprint(){couta=aendl;}private:inta;};classCDerive:publicCBase{public:CDerive(intb,inta):b(b),CBase(a){}voidprint(){6CBase::print();coutb=bendl;}private:intb;};intmain(){CDerived(4,6);d.print();CBaseb(5);b.print();}试验二:错误:通过对象不能访问保护成员。修改后代码如下所示:#includeiostreamusingnamespacestd;classCBase{public:CBase(inta):a(a){coutbasestructureendl;}~CBase(){7coutbasedestructureendl;}voidprint(){couta=aendl;}inta;};classCDerive:publicCBase{public:CDerive(inta,intb,intc):CBase(a),b(b),c(c){coutderivestructureendl;}~CDerive(){coutderivedestructureendl;}voidprint(){CBase::print();coutb.a=b.aendl;coutc=cendl;}private:CBaseb;intc;8};intmain(){CDerived(1,2,3);d.print();}运行结果如图:通过运行结果可以说明:在基类中如果构造函数有参数且在派生类中有对象成员,那么在派生类中先调用基类的构造函数再调用对象成员的构造函数,最后调用派生类的构造函数。析构函数正好相反。试验三:代码如下所示:#includeiostream#includecmathusingnamespacestd;classCPoint{public:CPoint(inta,intb,intc,intd):x1(a),y1(b),x2(c),y2(d)9{}protected:intx1,y1,x2,y2;};classCLine:publicCPoint{public:CLine(intx1,inty1,intx2,inty2):CPoint(x1,y1,x2,y2){}voidDistance(){len=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));cout直线长度为:lenendl;}voidXielv(){k=(double)(y2-y1)/(x2-x1);cout直线斜率为:kendl;}private:doublek,len;};classCCircle:publicCPoint{public:CCircle(intx1,inty1,intx2,inty2):CPoint(x1,y1,x2,y2){10}voidArea(){r=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));area=PI*r*r;cout圆的面积为:areaendl;}private:doubler,area;constdoublePI=3.14;};intmain(){ints1,s2,s3,s4;cout输入第一个点的坐标:;cins1s2;cout输入第二个点的坐标:;cins3s4;CLinet1(s1,s2,s3,s4);CCirclet2(s1,s2,s3,s4);t1.Distance();t1.Xielv();t2.Area();}定义了基类CPoint和派生类Cline、Circle。通过共有继承构造函数获得来自基类的坐标。然后在派生类中具体实现。11实验总结(由学生填写)老师问试验二:错在哪?运行结果是啥?回答:将保护访问限定符设定为共有访问限定符,运行结果为1、2、3.说明:1、每个实验项目填写一份实验报告,电子版命名方式为:学号姓名项目号.doc。例如:1167111182张三3.doc表示张三做的第3个项目的实验报告。2、实验报告电子版应该在实验后一周内提交到教务处网站的网络综合平台对应课程下。3、任课教师要求在收到实验报告的一周内进行批阅,并给出成绩及评语。4、实验报告电子版由教务处网站服务器保存。5、表格宽度可以根据实际情况伸缩。