面向对象程序设计(C++)实验指导 - 精简版 - befine 联系客服

发布时间 : 星期一 文章面向对象程序设计(C++)实验指导 - 精简版 - befine更新完毕开始阅读a15c7861caaedd3383c4d3db

实验四 派生类与继承(一) (2课时)

实验目的和要求:

1.理解类的继承的概念,能够定义和使用类的继承关系。 2.掌握派生类的声明与定义方法。 3.理解不同的继承类型

预习内容:

派生类的声明与定义;不同的继承类型的差异。

实验内容:

1. 下面是一个含有派生类的程序: #include class A { protected: // private: int m,n; public:

void set(int a, int b) { m=a; n=b; }

void show() { cout << m << \};

class B : public A { int s; public:

void sets() { s=m*n ; }

void shows() { cout << s << endl; } };

void main() { B obj;

obj.set(2,3); obj.show(); obj.sets(); obj.shows(); }

在这个程序中,B类的函数sets()能否访问类A中的变量m和n?为什么?如果在类A中把m和n定义为私有成员,上面的程序能否通过编译?为什么?

2.定义一个基类MyArray,基类中可以存放一组整数。(实验程序注意保留,下次实验要用)

class MyArray {

public:

MyArray(int leng); ~ MyArray();

void Input(); void Display(); Protected:

int *alist; //指向动态申请的一组空间 int length; //整数的个数 }; 要求:

(1)基类中有构造函数、析构函数、输入数据和输出数据的函数。

(2)定义一个SortArray继承自MyArray,在该类中定义函数实现排序功能。 (3)定义一个类ReArray继承自MyArray,在该类中定义函数实现逆转功能。

(4)定义一个类AverArray继承自MyArray,在该类中定义函数Aver()求解整数的平均值。

3. 建立一个建筑物类的层次体系。其中,基类building包括保护数据成员name(建筑物名称)、floors(层数)和areas(总面积),由building类派生住宅类house和办公楼类office;住宅类house包括私有数据成员rooms(房间数)和balcony(阳台数);办公楼类office包括私有数据成员offices(办公室数)和meetingrooms(会议室数)。住宅类house和办公楼类office都含有构造函数和print函数,以分别用于对数据成员的初始化和输出。在主函数中,实例化house类和office类对象并且将其数据输出。

实验五 派生类与继承(二) (2课时)

实验目的和要求:

1.熟悉公有派生和私有派生的访问特性。 2. 掌握单继承与多继承

3.学习虚基类在解决二义性问题中的作用。

预习内容:

公有派生和私有派生的访问特性

实验内容:

1、定义NewArray类,同时继承了上次实验SortArray、ReArray和AverArray,使得NewArray类的对象同时具有排序、逆转和求平均值的功能。在继承的过程中声明为虚基类,体会虚基类在解决二义性的作用。

2、定义一个动物(Animal)基类,具有Age、Weight等数据成员,由Animal类公有派生出鱼(Fish)类、陆地动物(TerrestrialAnimal)类。Fish类有鳍(Fim)属性,TerrestrialAnimal类有腿(Leg)属性。从Fish和TerrestrialAnimal公有派生出爬行动物(Reptile)类,在继承过程中,注意把Animal设置为虚基类。如果不把Animal设置为虚基类,会有什么问题?编程试试看。

当一个类有多个类派生而来,每个类的父类最总都归为一个类时,这个时候创建这个最后的子类是就会产生内存中的多份拷贝,为类避免这种现象发生,就要求使用虚继承。虚继承的格式:class 子类:virtual 继承方式 父类

实验六 多态性(2课时)

实验目的和要求:

1、理解静态多态性和动态多态性。 2、掌握虚函数的定义与使用方法。

预习内容:

静态多态性和动态多态性;虚函数的定义与使用方法。

实验内容:

1、 (1)定义一个类Animal,该类中可以存放动物的名字,并有一个Identify函数用于

显示动物的种类。

(2)定义两个类Cat和Dog,都继承自Animal,并重载Identify函数,不但要显示动物的种类,还要显示动物的名字。

(3)定义Tiger类,继承自Cat,重载Identify函数,显示动物的种类和名字。 2、 定义一个动物园类Zoo,管理动物,根据下面的提示编写动物类及相关函数。

class zoo {

public:

zoo(unsigned int max); //构造函数,max为最多圈养的动物数 ~zoo(){delete residents;} //析构函数 unsigned int Accept(Animal *d); //接收动物

void ListAnimals(); //显示动物园所有的动物 private:

unsigned int maxanimals; //动物园最多能圈养的动物数 unsigned int numanimals; //动物园当前圈养的动物数

Animal **residents; //指向动物园圈养的动物对象的指针数组 }

3、 编写程序Ex_Shape:定义一个类CShape,包含两个虚函数Area(用来计算面积)

和SetData(用来设计形状大小)。然后派生出矩形CRect类、圆CCircle类,分别求其面积。最后定义一个CArea类,计算这几个形状的面积之和,各形状的数据通过CArea类的构造函数或成员函数来设置。