实验5继承与派生文档格式.docx
- 文档编号:5575666
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:13
- 大小:248.67KB
实验5继承与派生文档格式.docx
《实验5继承与派生文档格式.docx》由会员分享,可在线阅读,更多相关《实验5继承与派生文档格式.docx(13页珍藏版)》请在冰点文库上搜索。
仪器组次:
B23
必修/选修:
选修
实验序号:
5
实验名称:
继承与派生
实验目的与要求:
1.使学生掌握C++语言类的继承和派生的基础编程;
2.培养学生具有运用C++语言编程解决问题的能力,提高学生的计算机编程能力;
3.引导和培养学生具有认真严谨的实验态度和勇于实践的学习精神。
实验仪器:
名称
型号
数量
微机
TOSHIBAL800
1
一.实验内容
1.类Point、类Circle和Cylinder
首先定义类Point,然后定义类Point的公有派生类Circle,再定义类Circle的公有派生类Cylinder。
类Point有数据成员int型的x和y,用于表示点的坐标位置,有成员函数p_show()、构造函数和析构函数、p_set(),p_show()用于显示输出点的坐标,p_set()用于设置x和y的值。
类Circle有新增私有数据成员float型的r和double型的s,表示圆的半径和面积,有成员函数c_area()用于计算圆的面积并对s赋值,有成员函数c_set()用于对成员r赋值,有成员函数c_show()用于显示输出半径r和面积s,有成员函数getr()用于获取半径r的值,有构造函数和析构函数。
类Cylinder有新增数据成员float型的h和double型的bs、v,分别表示圆柱体的高、表面积、体积,有对成员h赋值的成员函数cy_set(),有计算表面积并对bs赋值的成员函数cy_area(),有计算体积并对v赋值的成员函数volume(),有成员函数cy_show()用于显示输出高h、表面积bs和体积v,有构造函数和析构函数。
在主函数main()中分别定义Point、Circle、Cylinder类的对象,观察并记录各类所属的构造函数和析构函数的执行情况,然后在main()函数中通过调用成员函数对各类的对象的所有数据成员(包括继承所得)赋值并输出显示其值。
要求:
Ø
本程序中所有函数都要有明确的执行信息输出,例如Point类的构造函数执行时应输出“执行类Point的构造函数”。
各类定义时,数据成员都是私有属性,成员函数都是公有属性。
各构造函数都有参数(无默认形参值),并用参数对相应的数据成员初始化。
【编程设计思想】
根据题目要求,一点一点的编写代码即可。
首先定义点坐标的类,然后定义类Point坐标的公有派生类Circle,再定义类Circle的公有派生类Cylinder。
(1)类Point坐标定义私有数据成员x和y,用于表示点的坐标,成员函数p_set用于设置x和y的值,p_show()用于显示输出点的坐标。
(2)类Circle作为类Point的公有派生类,新增私有数据成员float型的h和double型的s,表示圆的半径和面积,成员函数c_area用于计算圆的面积并对s赋值,c_set用于对成员r赋值,getr()用于获取半径r的值,c_show用于显示半径r和圆面积s。
(3)类Cylinder作为类Circle的公有派生类,和类Point坐标是间接继承关系。
新增私有数据成员有float型的h和double型的bs、v,分别表示圆柱体的高、表面积、体积。
成员函数cy_set对成员h赋值,cy_area计算表面积并对bs赋值,volume计算体积并对v赋值,cy_show显示输出高h,表面积bs和体积v。
【源代码】
#include<
iostream.h>
classPoint
{
private:
intx,y;
public:
Point(inta,intb);
voidp_show();
voidp_set(inta,intb);
~Point();
};
Point:
:
Point(inta,intb)
x=a;
y=b;
cout<
<
"
执行类Point的构造函数"
endl;
}
voidPoint:
p_show()
执行类Point的函数p_show<
>
,输出坐标<
x,y>
值:
x<
"
y<
p_set(inta,intb)
执行类Point的函数p_set<
~Point()
执行类Point的析构函数"
classCircle:
publicPoint
floatr;
doubles;
Circle(inta,intb,floatc,doubled);
voidc_show();
voidc_set(float);
voidc_area();
floatgetr();
~Circle();
Circle:
Circle(inta,intb,floatc,doubled):
Point(a,b)//派生类Circle的构造函数
r=c;
s=d;
执行类Circle的构造函数"
voidCircle:
c_show()
执行类Circle的函数c_show<
,输出<
r,s>
值:
r<
s<
c_set(floata)
r=a;
执行类Circle的函数c_set<
c_area()//面积函数,面积为πr2
执行类Circle的函数c_area<
s=r*r*3.14159;
floatCircle:
getr()
执行类Cricle的函数getr<
returnr;
~Circle()
执行类Circle的析构函数"
classCylinder:
publicCircle
floath;
doublebs,v;
Cylinder(inta,intb,floatc,doubled,floate,doublef,doubleg);
voidcy_show();
voidcy_set(floata);
voidcy_area();
voidvolume();
~Cylinder();
Cylinder:
Cylinder(inta,intb,floatc,doubled,floate,doublef,doubleg):
Circle(a,b,c,d)//派生类Cylinder的构造函数
h=e;
bs=f;
v=g;
执行类Cylinder的构造函数"
voidCylinder:
cy_area()
bs=2*3.14159*Circle:
getr()*h+Circle:
getr()*Circle:
getr()*3.14159*2;
执行类Cylinder的函数cy_area<
cy_set(floata)
h=a;
执行类Cylinder的函数cy_set<
cy_show()
执行类Cylinder的函数cy_show<
h,bs,v>
h<
bs<
v<
volume()
v=3.14159*Circle:
getr()*h;
执行类Cylinder的函数volume<
~Cylinder()
执行类Cylinder的析构函数"
voidmain()
floatr,h;
Pointa1(0,0);
a1.p_show();
请输入类Point对象的<
:
;
cin>
x>
y;
a1.p_set(x,y);
Circlea2(1,1,1,0);
a2.p_show();
a2.c_show();
请出入类Circle对象的<
x,y,r>
y>
r;
a2.Circle:
p_set(x,y);
a2.c_set(r);
a2.c_area();
a2.Point:
p_show();
//加基类名和作用域运算符“:
”避免二义性,更可以清楚的知道使用的是哪个类里的函数。
Cylindera3(10,10,1,0,1,0,0);
a3.Point:
a3.Circle:
c_show();
a3.cy_show();
请输入类Cylinder对象的<
x,y,r,h>
r>
h;
c_set(r);
c_area();
a3.cy_set(h);
a3.cy_area();
a3.volume();
【执行结果】
展示对不同大小数据的处理
二、实验感想
1、通过本次实验,首先是熟悉了类和对象的定义,加强了类内构造函数和析构函数的应用,对类的数据成员的类内访问和类外访问有了进一步了解。
2、总的来说,本次实验相对难度不大,因为可以根据详细的题目要求一步一步写出程序。
其次是通过对输出结果样例的分析,确定哪些值是程序应该给定的初始值,然后在程序的相应位置进行附初值。
3、由于自己的马虎,存在漏写括号及分号的现象,需要进一步认真,杜绝不必要的马虎现象。
4、编程过程中,运用的思想,都是徐老师上课讲的内容,通过反复阅读课本,翻阅笔记,了解了老师讲的内容的精髓,并结合进本编程里,成功并不困难。
三、思考题
1、请举例或结合实验,说明类的数据成员(含继承所得数据成员)如何访问。
如果是在类内,可以直接通过成员函数访问;
如果是类的公有继承,则基类中公有成员和保护成员仍可以访问,而私有成员和不可访问成员则不可访问;
如果是私有继承,则基类的私有成员和保护成员变成保护成员,基类的私有和不可访问成员是不可访问的;
如果是私有继承,则基类中的公有成员和保护成员变成私有成员,基类的私有成员和不可访问成员是不可访问的。
但是,这些不可访问却不是绝对意义上的不可访问,可以通过对其同级成员函数的访问来进行即可。
例如在本实验中,在类Point的派生函数Circle中,因为类Circle是通过类Point的公有派生,所以要对类Point中的私有成员x,y进行访问,需要通过对voidp_set(inta,intb)函数的调用才可以,而若是类Point的公有成员函数,则可以直接访问。
在类Circle的派生类Cylinder中也是一样的访问原则。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 继承 派生