李长河 (教授)

教授 博士生导师 硕士生导师

性别:男

毕业院校:莱斯特大学

学历:研究生(博士)毕业

学位:工学博士学位

所在单位:自动化学院

职务:Professor

学科:自动化

办公地点:中国地质大学(武汉)自动化学院710室,湖北省武汉市洪山区鲁磨路388号

联系方式:027-8717 5083

Email:

实验十  类与对象的基本概念


一、 实验目的

  类是C++扩展数据类型,可以封装不同类型的数据成员和函数成员。类是面向对象程序设计的基础。本次实验内容包括面向对象的基本概念、构造函数与析构函数,从实际问题抽象出类等,通过实验要求掌握以下内容:

1、 掌握面向对象的基本概念和类的定义方法。

2、 掌握类成员的访问权限以及访问类成员的方法。

3、 掌握内联函数和默认函数。

4、 掌握构造函数和析构函数的意义及使用方法。

二、 实验内容

1、 范例:设计并测试一个矩形类(Rectangle)。属性为矩形的左下角与右上角的坐标,矩形水平放置。操作为计算矩形的周长和面积。

程序】

 

【要求】

(1) 将Rectangle(double l=0, double t=0, double r=0, double b=0); 改为Rectangle(double l, double t, double r, double b);

程序仍能正确运行吗?为什么?

(2) 注意成员函数void show( )、int calArea () 、int calPerimeter( )的使用,因为在第三章如果需编写类似功能的一般函数是需要带参数(形参)的。

而在此处作为类的成员函数又不需要带参数。思考为什么?

(3) 理解void Assign(double l,double t,double r,double b);函数的作用。将Rectangle(double l=0, double t=0, double r=0, double b=0);

改为Rectangle(double l, double t, double r, double b);这时,有人认为Rectangle(double l, double t, double r, double b) 和void assign(double l,double t,

double r,double b)的功能相同,那么assign 函数能否去掉呢?请试一试,结果会怎样?

2、 定义一个圆类(Circle),要求用两种方法定义:

方法一: 要求属性为半径,操作为计算圆的周长和面积。

方法二: 要求属性为半径(radius)、圆周长和面积,操作为输入半径,并计算周长、面积,输出半径、周长和面积。要求定义构造函数(以半径为参数,缺省值为0,周长和面积在构造函数中生成)和拷贝构造函数。

3、设计一个学校在册人员类(Person)。数据成员包括:身份证号(IdPerson),姓  名(Name),性别(Sex),生日(Birthday)和家庭住址(HomeAddress)。成员函数包  括人员信息的录入和显示等。使用多文件结构(参考课程主页给出的例子)

★选做题 4、编程建立一个分数类。分数类的数据成员包括分子和分母,操作包括约分、通分、加、减、乘、除、求倒数、比较、显示和输入。分数类的定义如下:   

【要求】完成上述所有成员函数并进行检验。 请用多文件结构完成,包括后续章节的题目

★选做题 5、集合是具有同一属性(共性)而又能互相区别(个性)的多个成员汇集起来的整体,构成集合的每个成员称为集合的元素,元素间没有顺序关系。

例如,所有的大写英文字母是一个集合,它包括26个元素:A、B、…、Z。不包含任何元素的集合称为空集合。

【实验要求]】

自定义一个集合类set,采用数组存放集合的元素。实现以下成员函数并完成主函数的测试。自定义集合运算包括:

1) 判断元素elem是否为集合set的元素。

2) 为集合添加一个元素elem。

3) 从集合中删除一个元素elem。

4) 复制一个集合,其元素与原集合完全一样。

5) 显示集合中的所有元素。

6) 求两个集合中相同的元素,即求两个集合的交集。

7) 求两个集合中所有的元素,即求两个集合的并集。

8) 判断两集合包含的元素是否完全相同。

9) 判断一个集合是否被包含在另一个集合之中,即是否为另一个集合的子集。*/

【程序】