实验4 继承的层次结构及多态性应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

(八)实验课承担单位:工程学院

相关文档
最新文档