C++上机实验

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C++实验报告实验项目名称:继承性实现学号:上机实践日期:2017/4/6实验项目编号:实验2组号:上机实践时间:14:00一、目的1.掌握继承的概念,能够定义和使用类的继承关系。2.了解在派生类中如何使用基类的成员以及基类成员在派生类中的访问控制特性。3.理解虚基类在解决二义性问题中的作用。二、实验内容与设计思想1.有如下的程序:#includeiostreamusingnamespacestd;classBase{public:Base(intp1,intp2){data1=p1;data2=p2;}intInc1(){return++data1;}intInc2(){return++data2;}voidDisplay(){coutdata1=data1data2=data2endl;}protected:intdata1,data2;};classD1:publicBase{public:D1(intp1,intp2,intp3):Base(p1,p2){data3=p3;}intInc1(){returnBase::Inc1();}intInc3(){return++data3;}voidDisplay(){coutdata1=data1data2=data2data3=data3endl;coutBase::Display()----;Base::Display();}protected:intdata3;};classD2:publicBase{public:D2(intp1,intp2,intp4):Base(p1,p2){data4=p4;}intInc1(){Base::Inc1();Base::Inc2();returnBase::Inc1();}intInc4(){return++data4;}voidDisplay(){coutdata1=data1data2=data2data4=data4endl;coutBase::Display()----;Base::Display();}protected:intdata4;};classD12:publicD1,publicD2{public:D12(intp11,intp12,intp13,intp21,intp22,intp23,intp):D1(p11,p12,p13),D2(p21,p22,p23){data5=p;}intInc1(){D1::Inc1();D2::Inc1();returnD1::Inc1();}intInc5(){return++data5;}voidDisplay(){coutdata1=data1data2=data2endl;//①coutdata3=data3data4=data4data5=data5endl;coutD1::Display()----;D1::Display();coutD2::Display()----;D2::Display();}private:intdata5;};intmain(){D12d(1,2,3,4,5,6,7);d.Display();coutendl;d.Inc1();d.Inc2();//②d.Inc3();d.Inc4();d.Inc5();d.D12::Inc1();d.Display();return0;}(1)这个程序在编译时会出现错误,请根据出错提示信息找出出错的原因。(2)修改程序中的错误,使之能正确运行。实验代码:#includeiostreamusingnamespacestd;classBase{public:Base(intp1,intp2){data1=p1;data2=p2;}intInc1(){return++data1;}intInc2(){return++data2;}voidDisplay(){coutdata1=data1data2=data2endl;}protected:intdata1,data2;};classD1:virtualpublicBase{public:D1(intp1,intp2,intp3):Base(p1,p2){data3=p3;}intInc1(){returnBase::Inc1();}intInc3(){return++data3;}voidDisplay(){coutdata1=data1data2=data2data3=data3endl;coutBase::Display()----;Base::Display();}protected:intdata3;};classD2:virtualpublicBase{public:D2(intp1,intp2,intp4):Base(p1,p2){data4=p4;}intInc1(){Base::Inc1();Base::Inc2();returnBase::Inc1();}intInc4(){return++data4;}voidDisplay(){coutdata1=data1data2=data2data4=data4endl;coutBase::Display()----;Base::Display();}protected:intdata4;};classD12:publicD1,publicD2{public:D12(intp11,intp12,intp13,intp21,intp22,intp23,intp):D1(p11,p12,p13),D2(p21,p22,p23),Base(p11,p12){data5=p;}intInc1(){D1::Inc1();D2::Inc1();returnD1::Inc1();}intInc5(){return++data5;}voidDisplay(){coutdata1=data1data2=data2endl;//①coutdata3=data3data4=data4data5=data5endl;coutD1::Display()----;D1::Display();coutD2::Display()----;D2::Display();}private:intdata5;};intmain(){D12d(1,2,3,4,5,6,7);d.Display();coutendl;d.Inc1();d.Inc2();//②d.Inc3();d.Inc4();d.Inc5();d.D12::Inc1();d.Display();return0;}2.设有一个点类Point的定义如下:Point{public:Point(){x=0;y=0;}Point(doublexv,doubleyv){x=xv;y=yv;}Point(Point&pt){x=pt.x;y=pt.y;}doublegetx(){returnx;}doublegety(){returny;}doubleArea(){return0;}voidShow(){coutx=x''y=yendl;}private:doublex,y;};编写程序,以点point类为基类,派生出矩形类Rectangle和圆类Circle。矩形由左上角的顶点和长、宽定义。圆由圆心和半径定义。派生类中新增的成员函数position(Point&pt)用于判断任一坐标点是在图形内、还是在图形的边缘上,还是在图形外。实验代码:#includeiostreamusingnamespacestd;classPoint{public:Point(){x=0;y=0;}Point(doublexv,doubleyv){x=xv;y=yv;}Point(Point&pt){x=pt.x;y=pt.y;}doublegetx(){returnx;}doublegety(){returny;}doubleArea(){return0;}voidShow(){coutx=x''y=yendl;}private:doublex,y;};classCircle:publicPoint{doubleradius;public:Circle(){radius=0;}Circle(doublexv,doubleyv,doublevv):Point(xv,yv){radius=vv;}Circle(Circle&cc):Point(cc){radius=cc.radius;}//拷贝构造函数doubleArea(){return3.14159*radius*radius;}doublePerimeter(){return2*3.14159*radius;}voidShow(){cout圆的圆心和半径分别为(getx()','gety())radius=radiusendl;}voidposition(Point&pt){doubledistance=sqrt((getx()-pt.getx())*(getx()-pt.getx())+(gety()-pt.gety())*(gety()-pt.gety()));doubles=distance-radius;if(s==0)cout点在圆上endl;//在圆上elseif(s0)cout点在圆内endl;//在圆内elsecout点在圆外endl;//在圆外}};classRectangle:publicPoint{doublewidth,length;public:Rectangle(){width=0;length=0;}Rectangle(doublexv,doubleyv,doublewv,doublelv):Point(xv,yv){width=wv;length=lv;}Rectangle(Rectangle&rr):Point(rr){width=rr.width;length=rr.length;}doubleArea(){returnwidth*length;}doublePerimeter(){return2*(width+length);}voidShow(){cout矩形左上角顶点,长,宽分别为(getx()','gety())'';coutlength=length''width=widthendl;};voidposition(Point&pt){doubles1,s2;s1=(pt.getx()-getx());s2=(gety()-pt.gety());if(((s1==0||s1==length)&&s2=0&&s2=width)||((s2==0||s2==width)&&s1=0&&s1=length))cout点在矩形上endl;elseif(s10&&s1length&&s20&&s2length)cout点在矩形内endl;elsecout点在矩形外endl;}};intmain(){PointP(1,1);P.Show();CircleCir(1,1,1);Cir.Show();Cir.position(P);RectangleRec(1,2,3,3);Rec.Show();Rec.position(P);return0;}三、实验使用环境Windows10VS2017四、实验小结1、在有多重继承的情况下,可能会造成派生类对基类中某个成员的访问出现不唯一的情况,这时就称对基类成员的访问产

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功