《面向对象程序设计》实验指导书(修订日期:2015.11.18) - 图文(10)

2019-08-03 14:53

第三章 实验内容与指导

3.1 实验一 类和对象 实验类型:设计型实验 4学时 3.1.1 实验目的

1、掌握类的概念以及定义类的方法;

2、掌握类的构造函数和析构函数的概念和使用方法;3、掌握对象数组、对象指针的定义和使用方法; 4、学习友元的概念和定义使用方法; 5、学习简单面向对象程序的编写;

3.1.2 知识点介绍

1、类的定义方法:

class 类名称 {

public:

公有成员(外部接口) private:

私有成员 protected:

保护型成员 };

2、访问对象中的成员可以有3种方法:

通过对象名和成员运算符访问对象中的成员; 通过指向对象的指针访问对象中的成员;

44

通过对象的引用变量访问对象中的成员;

3、构造函数(constructor)来处理对象的初始化。

构造函数是一种特殊的成员函数,不需要用户来调用它,而是在建立对象时自动执行。

构造函数的名字必须与类名同名,编译系统能识别它并把它作为构造函数处理。

它不具有任何类型,不返回任何值。构造函数的功能是由用户定义的,用户根据初始化的要求设计函数体和函数参数。

如果用户自己没有定义构造函数,则C++系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作。

用户可以自定义带参数的构造函数 构造函数首部的一般格式为

构造函数名(类型 1 形参1,类型2 形参2,?) 实参是在定义对象时给出的。 4、构造函数的重载:

在一个类中可以定义多个构造函数,以便对类对象提供不同的初始化的方法,供用户选用。

这些构造函数具有相同的名字,而参数的个数或参数的类型不相同。

尽管在一个类中可以包含多个构造函数,但是对于每一个对象来说,建立对象时只执行其中一个构造函数,并非每个构造函数都被执行。

5、析构函数(destructor)

是一个特殊的成员函数,它的作用与构造函数相反,它的名字是类名的前面加一个“~”符号。

当对象的生命期结束时,会自动执行析构函数:

①如果在一个函数中定义了一个对象(它是自动局部对象),当这个函数被调用结束时,对象应该释放,在对象释放前自动执行析构函数。

②static局部对象在main函数结束或调用exit函数结束程序时,才调用static局部对象的析构函数。

45

③如果定义了一个全局对象,则在程序的流程离开其作用域时(如main函数结束或调用exit函数) 时,调用该全局对象的析构函数。

④如果用new运算符动态地建立了一个对象,当用delete运算符释放该对象时,先调用该对象的析构函数。

析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作,使这部分内存可以被程序分配给新对象使用。

程序设计者事先设计好析构函数,以完成所需的功能,只要对象的生命期结束,程序就自动执行析构函数来完成这些工作。

析构函数不返回任何值,没有函数类型,也没有函数参数。因此它不能被重载。一个类可以有多个构造函数,但只能有一个析构函数

析构函数的作用并不仅限于释放资源方面,它还可以被用来执行“用户希望在最后一次使用对象之后所执行的任何操作”,

如果用户没有定义析构函数,C++编译系统会自动生成一个析构函数,但它只是徒有析构函数的名称和形式,实际上什么操作都不进行。 6、对象数组:

不仅可以由简单变量组成(例如整型数组的每一个元素都是整型变量),也可以由对象组成(对象数组的每一个元素都是同类的对象)。

7、定义指向类对象的指针变量的一般形式为:

类名 *对象指针名; 8、this指针:

在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,称为this。

它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。

this指针是隐式使用的,它是作为参数被传递给成员函数的。

46

9、友元可以访问与其有好友关系的类中的私有成员。 友元包括友元函数和友元类。

在类体中用friend对类以外函数进行声明,此函数就称为本类的友元函数。

友元函数可以访问这个类中的私有成员。 友元成员函数

friend函数不仅可以是一般函数(非成员函数),而且可以是另一个类中的成员函数。

一个函数(包括普通函数和成员函数)可以被多个类声明为“朋友”,这样就可以引用多个类中的私有数据

在A类的定义体中用以下语句声明B类为其友元类: friend B;

这时B类就是A类的友元类。友元类B中的所有函数都是A类的友元函数,可以访问A类中的所有成员。

关于友元,有两点需要说明:

(1) 友元的关系是单向的而不是双向的。 (2) 友元的关系不能传递。 3.1.3 实验内容 题目1 图形类设计

设计三个图形类:Circle(圆)、Rectangle(矩形)、Triangle(三角形);

1、Cirlce类基本信息:圆心坐标、半径;

Rectangle类基本信息:长、宽;

Triangle类基本信息:三个顶点坐标; 其中:成员变量为private属性,成员函数为public

属性;

2、每个图形类有多个构造函数:缺省构造函数、带参数的构造函数;

3、每个图形类有计算图形的面积GetArea(),显示图形的基本信息函数Show(),修改基本信息的函数Set(形参)。

47

以Circle类为例:通过GetArea()计算圆的面积,Show()函数中显示圆心坐标、直径、周长、面积等基本信息;Set(int x,int y, int r)函数可以修改圆心坐标和半径。

4、各个类的声明放在相应的头文件中(*.h),类的实现放在相应的实现文件中(*.cpp); [实验提示]

1、注意多个构造函数的声明方式与定义实现;

2、当输入数据为不合理数据时(例如:输入的三角形的顶点是否能组成一个三角形),提示用户输入错误; [测试数据]

1、Circle类测试数据: 圆心:(20,30) 半径:5 (-20,40) 30 (40,-10) -5 2、Rectangle类测试数据: 长和宽:20,50 40,5

3、Triangle类测试数据: 顶点:(20,30)、(40,50)、(40,20) (10,10)、(50,10)、(35,10) [思考与扩展]

题目2 人员管理

设计某小型公司的Employee(人员)类 1、类

48


《面向对象程序设计》实验指导书(修订日期:2015.11.18) - 图文(10).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:浅淡中学美术教育

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: