实验4 继承的层次结构及多态性应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验4 继承的层次结构
(一)实验类型:验证性
(二)实验类别:专业实验
(三)实验学时数:5学时实验课,其它时间由开放实验室补充
(四)实验目的
1.掌握类的继承层次结构的定义方法;
2.掌握多态性实现的三个条件:继承、覆盖和向上转型;
3.掌握抽象类和接口的定义方法;抽象类派生和实现接口的规则;
4.掌握在继承、聚合和多态作用时对象创建、使用和释放的过程。
(五)实验内容
1)将例5.2的程序片段补充和改写成一个完整、正确的程序,用私有继承方式。在程序中应包括输入数据的函数,在程序运行时输入num, name, sex, age, addr的值,程序输出以上5个数据的值。
提示:例11.2在教材P356页,两各类Student和Student1。私有继承方式。需要写好从键盘输入数据的函数,和向屏幕输出的函数。注意访问属性。
2)将例11.3的程序修改、补充,写成一个完整、正确的程序,用保护继承方式。在程序中应包括输入数据的函数。
提示:例11.3在教材P360页,两各类Student和Student1。保护继承方式。仅需要写好从键盘输入数据的函数。注意访问属性。
3)修改例11.3的程序,改为用公共继承方式。上机调试程序,使之能正确运行并得到正确的结果。对这两种继承方式作比较分析,考虑在什么情况下二者不能互相代替。
有以下程序结构,请分析访问属性。
class A// A为基类
{
public:
void f1( );
int i;
protected:
void f2( );
int j;
private:
int k;
};
class B: public A // B为A的公用派生类
{
public:
void f3( );
protected:
int m;
private:
int n;
};
class C: public B //C为B的公用派生类
{
public:
void f4( );
private:
int p;
};
int main( )
{
A a1; // a1是基类A的对象
B b1; // b1是派生类B的对象
C c1; // c1是派生类C的对象
return 0;
}
问:
(a)在main函数中能否用b1.i, b1.j和b1.k引用派生类B对象b1中基类A的成员?(b)派生类B中的成员函数能否调用基类A中的成员函数f1和f2?
(c)派生类B中的成员函数能否引用基类A中的数据成员i, j, k?
(d)能否在main函数中用c1.i, c1.j, c1.k, c1.m, c1.n, c1.p引用基类A的成员i, j, k,派生类B的成员m, n,以及派生类C的成员p?
(e)能否在main()函数中用c1.f1( ), c1.f2( ), c1.f3( )和c1.f4( )调用f1, f2, f3, f4成员函数?
(f)派生类C的成员函数f4能否调用基类A中的成员函数f1, f2和派生类中的成员函数f3?
提示:参考教材P358页表11.3和教材P359页表11.4,并且亲自动手在vc编译器上实践一下。
有以下程序结构,请分析所有成员在各类的范围内的访问权限。
class A
{
public:
void f1( );
protected:
void f2( );
private:
int i;
};
class B: public A
{
public:
void f3( );
int k;
private:
int m;
};
class C: protected B
{
public:
void f4( );
protected:
int n;
private:
int p;
};
class D: private C
{
public:
void f5( );
protected:
int q;
private:
int r;
};
int main( )
{
A a1;
B b1;
C c1;
D d1;
// ……
};
提示:这条题改了一下变量,跟书本上有所不同。
(六)实验要求
1.学生在实验过程中自己独立完成设计和编程,1人为1组。
2.完成实验报告:源程序代码,并添加必要的注释。
(七)实验设备
个人计算机(Windows操作系统,V isual C++ 6.0)
(八)实验课承担单位:工程学院
实验5 多态性应用
(一)实验类型:验证性
(二)实验类别:专业实验
(三)实验学时数:5学时实验课,其它时间由开放实验室补充
(四)实验目的
1.掌握类的继承层次结构的定义方法;
2.掌握多态性实现的三个条件:继承、覆盖和向上转型;
3.掌握抽象类和接口的定义方法;抽象类派生和实现接口的规则;
4.掌握在继承、聚合和多态作用时对象创建、使用和释放的过程。
(五)实验内容
1)在例12.1程序基础上作一些修改。定义Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder类。将类的定义部分分别作为3个头文件,对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数中使用#include命令把它们包含进来,形成一个完整的程序,并上机运行。
2)在例12.3的基础上作以下修改,并作必要的讨论。
(a)把构造函数修改为带参数的函数,在建立对象时初始化。
(b)将析构函数声明为virtual,运行程序,分析结果。
3)写一个程序,定义抽象基类Shape,由它派生出5个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。
用虚函数分别计算几种图形的面积,并求它们的和。要求用基类指针数组,使它的每一个元素指向一个派生类对象。
(六)实验要求
1.学生在实验过程中自己独立完成设计和编程,1人为1组。
2.完成实验报告:源程序代码,并添加必要的注释。
(七)实验设备
个人计算机(Windows操作系统,V isual C++ 6.0)
(八)实验课承担单位:工程学院