实验4对象和类

  • 格式:doc
  • 大小:126.00 KB
  • 文档页数:5

1 实验四 类与对象的应用

实施时间:2010-11-2(周二)

实验类型:验证

一、实验目的

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

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

3.掌握构造函数与析构函数的定义及使用方法。

二、预备知识:

1.类的声明形式为:

class 类名{

public:

公有数据和函数 //允许程序中的所有函数访问

private:

私有数据和函数 //除该类的成员函数外其他函数无法访问

protected:

受保护数据和函数 //允许该类的派生类中的成员函数访问

}; 2 ·完整的类应由类的定义头文件*.hpp和类的实现文件*.cpp构成,这样结构清晰整洁。

·应注意:必须在实现文件*.cpp开始包含头文件*.hpp,此定义才有效。

·通常在类定义中,成员函数仅作声明。函数定义通常在类的说明之后进行,其格式如下:返回值类型 类名::函数名(参数表)

{……}//函数体

“::”称为作用域解析运算符,它指出该函数是属于哪一个类的成员函数。

2.对象:类的对象是该类的某一特定实体,即类类型的变量。

•声明形式: 类名 对象名;

•对象初始化:C++建立和初始化对象的过程专门由该类的构造函数来完成。

3.对象使用规则:

只要在对象名后加点操作符,再加上成员数据或成员函数名就可以了。但是这些成员必须是公有的成员,只有公有成员才能在对象的外面对它进行访问。

4. C++规定:

•与类同名的成员函数称为该类的“构造函数(constructor)”。

•构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。

•在对象创建时由系统自动调用。 3 •如果程序中未声明,则系统自动产生出一个默认形式的构造函数。但是默认形式的构造函数并不做任何初始化工作,所以在建立该类的对象时不能确保有一个确定的初始状态。

•可重载构造函数以便用各种方法初始化类的对象。

注意:构造函数的名字必须与类名相同,并且在定义构造函数时不能指定返回类型,函数体中也不允许返回值,但可以有无值返回语句“return”。

5. C++规定:

•和类同名但前面加上字符“~”的函数称为类的“析构函数(destructor)”。

•析构函数的作用:完成对象被删除前的一些清理工作。在对象的生存期结束的时刻系统

自动调用它,然后再释放此对象所属的空间。(即在系统收回类的对象所占用的内存空

间前,析构函数用来完成一些清理工作)

•如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数。

•析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用。

•一个类只能有一个析构函数。重载析构函数是不允许的。

•析构函数以调用函数相反的顺序被调用。

6.调用析构函数和构造函数的时机

•析构函数合构造函数通常是被自动调用的。调用这些函数的顺序取决于建立合撤消对象的顺序。一般来说,调用析构函数的顺序于调用构造函数的顺序相反。但是,对象 4 的生命期能够改变调用析构函数的顺序。

①析构函数与构造函数调用顺序相反;

②所有全局对象都在主函数main()之前被构造,其相应的析构函数在程序终止时被调用;

③自动存储类别的局部对象,其构造函数是在声明该对象的时候被调用的,相应的析构函数在程序退出该对象的作用域时(即程序退出声明该对象的程序块的时候)被调用;

④静态局部对象的构造函数只在声明该对象的时候调用一次,相应的析构函数在程序终止时被调用。

三、实验内容

1.定义一个圆类Circle,属性为半径Radius、圆周长circum和面积area,操作为输入设置半径并计算周长、面积,输出半径、周长和面积。并且要求定义构造函数(以半径为参数,默认值为0)、复制构造函数和析构函数。

2.为例4.2矩形类定义复制构造函数。正确编辑、编译、链接与运行。

3.编程:建立用于完成复数算数运算的类Complex。复数类的数据成员包括实部和虚部,操作包括加、减、显示输出。复数类的定义如下: 5

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