内蒙古科技大学面向对象的程序设计实验8 继承(一)_第1页
内蒙古科技大学面向对象的程序设计实验8 继承(一)_第2页
内蒙古科技大学面向对象的程序设计实验8 继承(一)_第3页
内蒙古科技大学面向对象的程序设计实验8 继承(一)_第4页
内蒙古科技大学面向对象的程序设计实验8 继承(一)_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、内蒙古科技大学面向对象的程序设计实验报告课程名称:面向对象的程序设计姓名:陈伟光实验名称:继承(一)学号:任课教师:刘月峰专业:软件工程指导教师:刘月峰班级:15-软件一班一、实验目的1理解继承的含义以及声明;2理解共有派生、私有派生和保护派生的含义以及使用;3理解单派生类中构造函数和析构函数的调用顺序。二、实验环境编译器:Visual C+ 6.0.操作系统:Windows 7旗舰版三、实验内容2.1练习(一):1理解下面的程序,并在VC+6.0下运行查看结果,回答程序后面的问题。#include iostream.hclass CBasepublic:CBase(int a) :a(a)p

2、rotected:void print() couta=aendl;private:int a;class CDerive : public CBasepublic:void print() CBase:print(); coutb=bendl;private:int b;void main()CDerive d;d.print();CBase b;b.print();问题一:以上程序有两大错误,试指出来,并改正之?2理解下面的程序,并在VC+6.0下运行查看结果,回答程序后面的问题。#include iostream.hclass CBasepublic:CBase(int a) :a(a)

3、 coutbase structureendl;CBase() coutbase destructureendl;void print() couta=aendl;protected:int a;class CDerive : public CBasepublic:CDerive(int a, int b,int c) :CBase(a),b(b),c(c) coutderive structureendl;CDerive() coutderive destructureendl;void print() CBase:print(); coutb.a=b.aendl; coutc=cendl;

4、private:CBase b;int c;void main()CDerive d(1,2,3); -d.print();问题一:以上程序的输出结果是什么,说明为什么?问题二:处语句执行完后,d.b.a的值为多少?2.2练习(二):1定义点CPoint类作为基类,在此基础上派生出直线CLine类和圆CCircle类,并要求基类和各派生类具有以下特点:aCLine类含有计算直线长度和斜率的成员函数;bCCircle类含有计算圆面积的成员函数。四、实验过程练习1实验题目源代码如下:直接编译结果如下:查看错因,首先前两句话写明,在创建CBase和CDerive对象时候,没有传递参数,实际代码中CD

5、erive根本没有正确的构造函数,代码区中加入一段带有初始化列表的构造函数第三句话指明基类对象b直接调用CBase类保护成员函数,属于类外调用,权限错误,此处可以将print的权限改为public修改后的代码如下:然后尝试编译运行:运行成功,符合题意练习2实验题目提供源代码如下:尝试编译:错误集中在基类成员数据a上,分析代码,CDerive类对象d创建时候一共有三个参数,1传递至派生类,再调用基类构造函数,3直接传递给派生类构造函数, 2传递给了派生类的中内嵌的基类成员对象,然而在公有继承下,派生类对象只能访问基类的公有数据,所以此处将a的权限改为public,修改之后的代码如下:尝试编译运行

6、:结果和代码本意相同,修改成功练习3根据题意,设计代码如下:面积计算以及斜率计算分别写在了CLine类和CCircle类的构造函数中,在创建对象的时候输入x2,y2 r即可算出距离和面积试运行结果如下:运行结果正确五、实验总结实验源代码:练习(一)#include iostream.hclass CBasepublic:CBase(int a):a(a) / protected:void print() /错误1.CBase类对象类外无法直接调用此主函数,应该改为public型couta=aendl;private:int a;class CDerive : public CBasepubli

7、c:CDerive(int a,int b):CBase(a),b(b) /错误2.构造函数错误,初始化列表和参数错误void print()CBase:print(); /保护继承下,派生类中可以访问基类的公有和保护数据coutb=bendl;private:int b;void main()CDerive d(0,0); /因为原题构造函数中有形参,所以创建要加上参数d.print();CBase b(0);b.print();/*#include iostream.hclass CBasepublic:CBase(int a):a(a)protected:void print()cout

8、a=aendl;private:int a;class CDerive : public CBasepublic:void print()CBase:print();coutb=bendl;private:int b;void main()CDerive d;d.print();CBase b;b.print();*/练习(二)#include iostream.hclass CBasepublic:CBase(int a):a(a)coutbase structureendl;CBase()coutbase destructureendl;void print()couta=aendl;pu

9、blic:int a;class CDerive : public CBasepublic:CDerive(int a, int b,int c):CBase(a),b(b),c(c)coutderive structureendl;CDerive()coutderive destructureendl;void print()CBase:print();coutb.a=b.aendl; /公有继承下派生类子对象只能访问基类的公有数据;coutc=cendl;private:CBase b;int c;void main()CDerive d(1,2,3);/ -d.print();/*1.没

10、有任何输出结果,因为程序无法通过编译2.d.b.a的值为2 ,因为构造函数实参的第二个元素2,传递给CDerive类的子对象b,b.a被初始化为2*/*#include iostream.hclass CBasepublic:CBase(int a):a(a)coutbase structureendl;CBase()coutbase destructureendl;void print()couta=aendl;protected:int a;class CDerive : public CBasepublic:CDerive(int a, int b,int c):CBase(a),b(b

11、),c(c)coutderive structureendl;CDerive()coutderive destructureendl;void print()CBase:print();coutb.a=b.aendl;coutc=cendl;private:CBase b;int c;void main()CDerive d(1,2,3); -d.print();*/练习(三)#include #include class CPointprivate:float x,y;public:CPoint(float x1,float y1):x(x1),y(y1)cout-CPoint基类构造函数已

12、调用-endl;void display()coutx= CPoint:x y= CPoint:yendl;class CLine:public CPointprivate:double k;double l;public:CLine(float x1,float y1):CPoint(x1,y1)cout-CLine派生类构造函数已调用-endl;float x2,y2;coutPlease input x2,y2:x2y2;l=sqrt(x1-x2)*(x1-x2)+(y2-y1)*(y2-y1);coutl:lendl;if(y2-y1!=0)k=(y2-y1)/(x2-x1);coutk= kendl;elsecout分母为0,k不存在endl; ;class CCircle:public CPointprivate:double r;public:CCircle(float x1,float y1):CPoint(x1,y1)cout-CCircle派

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论