![内蒙古科技大学面向对象的程序设计试验8-继承一_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-11/14/aec69c29-b38c-4220-827a-9e37f91559ce/aec69c29-b38c-4220-827a-9e37f91559ce1.gif)
![内蒙古科技大学面向对象的程序设计试验8-继承一_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-11/14/aec69c29-b38c-4220-827a-9e37f91559ce/aec69c29-b38c-4220-827a-9e37f91559ce2.gif)
![内蒙古科技大学面向对象的程序设计试验8-继承一_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-11/14/aec69c29-b38c-4220-827a-9e37f91559ce/aec69c29-b38c-4220-827a-9e37f91559ce3.gif)
![内蒙古科技大学面向对象的程序设计试验8-继承一_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-11/14/aec69c29-b38c-4220-827a-9e37f91559ce/aec69c29-b38c-4220-827a-9e37f91559ce4.gif)
![内蒙古科技大学面向对象的程序设计试验8-继承一_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-11/14/aec69c29-b38c-4220-827a-9e37f91559ce/aec69c29-b38c-4220-827a-9e37f91559ce5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、内蒙古科技大学面向对象的程 序设计实验&继承(一)内蒙古科技大学面向对象的程序设计实验报告课程名称:面向对象的程序设计姓名:陈伟光实验名称:继承(一)学号:1567159118任课教师:刘月峰专业:软件工程指导教师:刘月峰班级:15-软件一班一、实验目的1 理解继承的含义以及声明;2 理解共有派生、私有派生和保护派生的含义以及使用;3 理解单派生类中构造函数和析构函数的调用顺序。二、实验环境编译器:Visual C+ 6.0.操作系统:Win dows 7 旗舰版三、实验内容2.1 练习(一):1 理解下面的程序,并在 VC+6.0下运行查看结果,回答程序后面的问题。#in elude
2、 "iostream.h"class CBasepublic:CBase(int a):aprotected:void prin t()cout<v"a="vvavve ndl;private:int a;;class CDerive : public CBasepublic:void prin t()CBase:pri nt();cout<v"b="vvbvve ndl;private:int b;void mai n()CDerive d;d.pr in t();CBase b;b.pr in t();问题一:以上程序
3、有两大错误,试指出来,并改正之?2 理解下面的程序,并在VC+6.0下运行查看结果,回答程序后面的问题。#in clude "iostream.h"class CBasepublic:CBase(int a):a(a)cout<<"base structure"<<e ndl;CBase()cout<<"base destructure"<<e ndl;void prin t()cout<v"a="vvavve ndl;protected:int a;;clas
4、s CDerive : public CBasepublic:CDerive(i nt a, int b,i nt c):CBase (a) ,b(b),c(c)cout<<"derive structure"<<e ndl;CDerive()cout<<"derive destructure"<<e ndl;void prin t()CBase:pri nt();cout<v"b.a="vvb.avve ndl;cout<<"c="<<
5、c<<e ndl;private:CBase b;in t c;void mai n()CDerive d(1,2,3); d.pr in t();问题一:以上程序的输岀结果是什么,说明为什么?问题二:处语句执行完后,d.b.a的值为多少?2.2 练习(二):1 定义点CPoint类作为基类,在此基础上派生岀直线CLine类和圆CCircle类,并要求基类和各派生类具有以下特点:a. CLine类含有计算直线长度和斜率的成员函数;b. CCircle类含有计算圆面积的成员函数。四、实验过程练习1实验题目源代码如下ttinclude "iostrean.h" cl
6、ass CBasepublic: CBasefint a) 汕(Jprotected: uoid pnint(>cout<<,a=(*<<a«e-n(ll;priuate: int a -CDerive ; publicpublic:uoid print()CBase:print(); cout«Mb-,«b«en(ll;private: int b;:void main()CDerins d; d.print(); CBase b;t> .print(); -Configuration: 8-1.1 - Uin32
7、DebugCompiling.8-1.1 r CPPC:usersadiiinistratorDesktop实验.1 .cpp(7B): C:user5adinini5tratorDesktop实验航8-1.1 .cpp(72): C:UGpr£adniinlEtratorDpsl4top实验. 1 _cpp(73):error error errorC:ucersadraLnistratorDe£l<top88-1.1 -Cpp(5d):执行cl*exe时岀错,C2512:C2512:C2248: gee declaration of'CDeriue'
8、; : no'C8as&' : no j|Hprint' : canm8-1.1 *obj - 1 PKror(s), 0 i>arning(&)查看错因,首先前两句话写明,在创建CBase和CDerive对象时候,没有传递参数,实际代码中CDerive根本没有正确的构造函数,代码区中加入一段带有初始化列表的构造函数第三句话指明基类对象 b直接调用CBase类保护成员函数属于类外调用,权限错误,此处可以将print的权限改为public修改后的代码如下include "iostream.h" class<public:CB
9、ase(int a):a(a)/ protected:ucdd printf)"错误i类对象类外无法直接调用此主I<CDUt«Ma-,<<a«en(ll;>private:int d;;class CDeriue : publicpublic:CDpHii>p(int a,int b)"惜误2.构這函数错误”初始化列表和参数错,uoid print()C时強:print();"保护继承下,派生类中可以访间基类的公牵cout«Mb-M«IK<en(ll;private:int b;;void
10、 nain()<CDerive d(0, 9> ;"因为原题构造函数中有形勢所以创建要加一d. print();CBase b(o);bkprint();然后尝试编译运行运行成功,符合题意练习2实验题目提供源代码如下ttinclud ''iostrMfh-h*class cease-publtc::CDaef int a):a(a>cout«*,base structure"«endl;CBase()cniut«*,base destriicture"«endl;void printC>
11、;<CDUt«*'a-'X<a<<endl;>protected:int a;>;tlass CDtrlu? : public CBase<public:CDeriup(int a, int bint c):CBase(a),b(b),c(c)<caut<<"deriue structure"«endl;CD?riup()cout<<"deriue destructure"<<endl;uaid priftt(>DBase:pri
12、nt(> cout«,b_a=*,«b-a«endl; cout«*,c-l,<<c«endll;卜private;CBdse b;int c;>;void Rin()<C&eritfe(1C1,2.3);(1 printf);尝试编译:Configuration; 8一=2 - Uin32 Debug Compiling8-1_2.cppC:usersadminlstratorOeskt叩乜8T .g.cppf 93) : terror C224B: ' j ' : cannot 2 C_
13、usersadniinlstratorDesktopa8-1.2 .cpp(76) :tlEClrJtion of执行cl.exe时岀嗇-8-1_2.obj - 1 errorfs), n warning(s)错误集中在基类成员数据a上,分析代码,CDerive类对象d创建时候一共有三个参数,1传递至派生类,再调用基类构造函数,3直接传递给派生类构造函数,2传递给了派生类的中内嵌的=基*类成员对象,然而在公有继承下,派生类对象只能访问基类的公有数据,所以此处将a的权限改为public,修改之后的代码如下ttinclud d,ioGti-eam_hdr clss CBase<pubLic:
14、=a(a>cout«,base structure"«endl;>cout<<"base dest rue lure'*«endl;uaxd print()cout«"d=,<<a«endl f>public:int a;class C&eriue : public CBasepublic: GDeriwe(int at int b9int co :GBase(a),b(b).c(c)<cout«*'deriue structure&
15、quot;«endl;CDeriueC)<cout«*'cleriue destructur£"Enill;void print()"公有继承下派主类于对象只能访问基自CBse: zpnntC );cout<<"D 目二吕 WfEnill.: coutCCTs'XCcCtendl;priuate: CBase b; int c;void nain()<CDeriue dC1,2,3);/ d-print():尝试编译运行'C:u £er5acfministrato rDes k
16、to ptSDeb u g8-1,2 ex e'phase structure btj-ase structupe depiu« GtFUCtUle k=l tb +0=2c -3derive desJbase destiuctur-e tbase destructU-F-e tPrc?s ony key tn cont inue结果和代码本意相同,修改成功练习3根据题意,设计代码如下:y<<pndl;l,<<endl;Itinclude <iostream.h> ttinclude <nath.h> class CPoint
17、priuate:float x,y;public: CPoint(loat x19float :x(x1) ,y(y1) <cout«,iCPoint基类构造函数已调用>uoid display()<cout«"x= 'XKCPoint: :x«a,«二i«CPoint:class CLine:public CPoint< priuate: double k; double 1;public: CLine(Float x1 ,Float y1) :CPoint(x1 )cout«-CLine派
18、生类构造固数已调用-Float x2»y2; cout«,fPlease input x2 9y2:,<<endl; cin»x2»y2;I=sqrt(x1-x2)*(x1-x2)+(y2-y1)(y2-y1); cout«,il:,i«K<endl;if(y2-y1?=0)< k=(y2-y1)/<x2-x1); cout«Bik= ,l«k«en(ll;> else分母为趴"不存在B,«endl;>>;class CCiMCle:pu
19、blic CPoint< priuate: double r;public: CCircle(float x1 ,float y1) :CPoint(x1,y1) <cout«M-CCircleiR生类构造函数己调用cout<<Mplease input r :,l<<endl;cin>>r; cout«MS= B,«3 .1M59*r*r«endl;>>; .uoid rnain()<float x13y1; cout<<MPlease input x1 ,iy1 :BI&l
20、t;<endl; cin>>x1>>y1;CPoint CP(x1CP.displaO; CLine CL(x1;CCircle CC(x1,y1);面积计算以及斜率计算分别写在了CLine类和CCircle类的构造函数中,在创建对象的时候输入 x2,y2 r即可算出距离和面 积试运行结果如下21 'CAu 5 ft rsa dmiri *;tra-t&rD Mktop 读验ebu gS-2 J, exe"Please input xlP :2_7CFcHnC基类构造函数已调用 x= 2.7 y= 6.4rFoint:基类狗造函数已调用&
21、#163;血5哇旌荚物造函数已调用Pie ase input x2r2 £5.34_81=3-05297k= 061B3S5CPo hn基粪构造醪已调用 kCirch派冬构盖函裁已调用please input r =S=亦 5357fress any k巳对 to continue运行结果正确五、实验总结实验源代码:练习(一)#i nclude "iostream.h"class CBasepublic:CBase(i nt a):a(a)/ protected:void print() /错误1.CBase类对象类外无法直接调用此主函数,应该改为public型c
22、out<v"a="vvavve ndl;private:int a;;class CDerive : public CBasepublic:CDerive(int a,int b):CBase(a),b(b)/ 错误2.构造函数错误,初始化列表和参数错误void prin t()CBase:pri nt(); /保护继承下,派生类中可以访问基类的公有和保护数据cout<<"b="<<b<<e ndl;private:int b;void mai n()CDerive d(0,0); /因为原题构造函数中有形参,所
23、以创建要加上参数d.pr in t();CBase b(0);b.pr in t();/*#i nclude "iostream.h" class CBasepublic:CBase(int a):a(a)protected:void prin t()cout<<"a="<<a<<e ndl;private:;class CDerive : public CBase public:void prin t()CBase:pri nt();cout<v"b="vvbvve ndl;private:
24、int b;void mai n()CDerive d;d.pr in t();CBase b;b.pr in t();*/练习(二)#in clude "iostream.h"class CBasepublic:CBase(int a):a(a)cout<<"base structure"<<e ndl;CBase()cout<<"base destructure"<<e ndl;void prin t()cout<<"a="<<a<&
25、lt;e ndl;public:int a;class CDerive : public CBasepublic:CDerive(i nt a, int b,i nt c):CBase (a) ,b(b),c(c)cout<<"derive structure"<<e ndl;CDerive()cout<<"derive destructure"<<e ndl;void prin t()CBase:pri nt();cout<v"b.a="vvb.avve ndl; /公有继承下派
26、生类子对象只能访问基类的公有数据;cout<<"c="<<c<<e ndl;private:CBase b;in t c;void mai n()CDerive d(1,2,3);/ d.pr in t();/*1. 没有任何输岀结果,因为程序无法通过编译2. d.b.a的值为2,因为构造函数实参的第二个元素2,传递给CDerive类的子对象b,b.a被初始化为2*/*#i nclude "iostream.h"class CBasepublic:CBase(int a):a(a)cout<<"b
27、ase structure"<<e ndl;CBase()cout<<"base destructure"<<e ndl;void prin t()cout<<"a="<<a<<e ndl;protected:int a;class CDerive : public CBasepublic:CDerive(i nt a, int b,i nt c):CBase (a) ,b(b),c(c)cout<<"derive structure"<
28、;<e ndl;CDerive()cout<<"derive destructure"<<e ndl;void prin t()CBase:pri nt();cout<v"b.a="vvb.avve ndl;cout<<"c="<<c<<e ndl;private:CBase b;in t c;void mai n()CDerive d(1,2,3); d.pr in t();*/练习(三)#in elude <iostream.h>#in elude <math.h>class CPoi ntprivate:float x,y;public:CPoin t(float x1,float y1):x(x1),y(y1)cout«"CPoint基类构造函数已调用"<<endl;void display()cout<<"x= "«CPoint:x<<" &
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年受体激动阻断药合作协议书
- 2025年主令电器防雷避雷产品合作协议书
- 2025年致密熔铸合成云母陶瓷合作协议书
- 八年级美术-第三课-《书籍装帧设计》教案
- 2025年二年级音乐年度总结参考(2篇)
- 2025年个人股权无偿转让协议简单版(2篇)
- 2025年二手汽车转让协议格式范文(2篇)
- 山西省2024七年级道德与法治上册第二单元成长的时空第五课和谐的师生关系情境基础小练新人教版
- 2025年五年级《红楼梦》读书心得(2篇)
- 2025年个人房产转让合同简单版(2篇)
- 数学-河南省三门峡市2024-2025学年高二上学期1月期末调研考试试题和答案
- 二零二五版电力设施维修保养合同协议3篇
- 最经典净水厂施工组织设计
- VDA6.3过程审核报告
- 《心脏血管的解剖》课件
- 2024-2030年中国并购基金行业发展前景预测及投资策略研究报告
- 河道清淤安全培训课件
- 2024年湖南商务职业技术学院单招职业适应性测试题库带答案
- 7.3.1印度(第1课时)七年级地理下册(人教版)
- 骨科手术中常被忽略的操作课件
- 《湖南师范大学》课件
评论
0/150
提交评论