C++类的定义及其应用

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《C++程序设计》——类的定义及使用

准备知识:

⑴命名空间(namespace)

一个软件往往由多个模块组成,其中会包括由不同程序员开发的组件以及类库提供的组件,因此,在对标识符命名时有可能发生冲突。

一个命名空间将不同的标识符集合在一个命名的作用域内,以防止命名冲突。比如以如下形式声明一个命名空间s:

namespace s{

class A{ };

void fun();

}

则引用标识符的方式如下:

s::A a;

s::fun();

即在标识符前加命名空间名称及“::”的前缀。

E1_1

如果使用声明:using namespace <已命名的命名空间名称>;

比如:using namespace s;

该命令用来打开命名空间的限制,则该命名空间中所有的标识符在当前作用域中都可以直接使用,不需要任何前缀。

E1_2

在C++标准程序库中,使用了命名空间std,所有标识符都声明在命名空间std中。在使用C++标准程序库中的任何标识符时,可以直接指定标识符所属的命名空间,例如:std::cout,也可以使用using命令来打开命名空间的限制。

C++标准程序库中中的头文件不再有“.h”的扩展名,因此,在程序开始处使用#include、#include、#include等包含命令时,可以使用using namespace std;命令打开命名空间的限制。

E1_3

在Visual C++ 6.0编译环境中要使用一系列的I/O流类,就应该包含头文件iostream。

⑵对象:现实世界中的一切事物都是对象,对象可以是有形的,比如一间房间,一本书籍;也可以是无形的,比如一个计划。对象可以是一个简单的个体,比如一个学生;也可以是由其它对象组合而成,比如一个公司有多个部门,每个部门又由许多员工组成。

对类似的对象进行抽象,找出共同的属性就可以构成一种类形。

作为面向对象的程序设计语言,C++支持“抽象”。将抽象后的数据和函数“封

《C++程序设计》——类的定义及使用

装”在一起,就构成了C++的“类”。

⑶在面向过程的结构化程序设计中,程序的模块是由函数构成的。函数将逻辑上相关的语句和数据封装,用于完成特定的功能。

在面向对象的程序设计中,程序的模块是由类构成的。类是对逻辑上相关的函数和数据的封装,是对问题的抽象描述。即将抽象得到的数据和函数有机的结合成一个整体,形成“类”。其中的数据和函数都是类的成员。

类实际上相当于一种用户自定义的类型,在定义一个类时要说明其数据和操作内容。

类的特性:封装、继承和多态。

class类名称标识符{

成员列表:包括数据成员和成员函数的定义及存取控制类别。

};

类成员函数的实现

其中:

成员列表:数据成员(属性),成员函数(行为方法)。

成员的存取控制类别:

private:除了友元函数外,类的外界(对象)不能直接访问该类别成员,只有类定义中的成员函数或数据成员可以访问该类别成员。在类定义中private:若紧接著类名称,该关键字可以省略。

※很好的体现了类的封装特性。

public:类的外界(对象)可以直接访问该类别成员,并且可以通过该类别成员访问private类别的类成员。

※定义了类的外部接口。

protected:在涉及类继承时使用。

※类成员的存取控制类别定义没有先后顺序。

作用域说明符:::用于说明类成员的归属。

比如:类定义中的成员函数的定义在类定义中完成,而成员函数的实现通常

是在类定义外完成的。所以,要使用作用域说明符来说明成员函数归属于那一个类。当然,类定义中的成员函数的实现也可以在类定义中完成,但是,这样的函数通常只包含简单的顺序结构的语句(见内联函数)。

《C++程序设计》——类的定义及使用

类的使用:定义类的对象(类的对象是类定义的实例)。

类对象的建立(分配存储空间)需要构造,释放内存空间需要析构。

构造函数:在创建对象时,利用特定值将对象初始化为一个特定的状态。

构造函数在对象被创建时被自动调用,没有函数返回值。

在类的public成员中可以定义有多个参数数量及参数类型不同的构造函数,函数名称即为类的名称。

YSC1-1、YSC1-2

构造函数执行步骤:

⑴按照初始化列表为相应属性赋初值,如果成员为对象,按照给定的初始值执行该对象的构造函数。

⑵执行构造函数的函数体语句。

YSC1-3、YSC1-4

※若在类的定义中没有定义构造函数,C++编译器将自动产生缺省的构造函数。该函数无参,也不做任何实质性的工作。因为在对象被创建时自动调用构造函数是“例行公事”。

析构函数:用于完成对象生存期结束前的一些清理工作。函数调用结束,对象在内存中所占内存空间被释放。

析构函数在对象的生存期即将结束时被自动调用,没有参数和函数返回值。

在类的public成员中可以定义一个(只能是一个)析构函数,函数名称为在类的名称前加符号“~”。

YSC1-1、YSC1-2

析构函数执行步骤:若程序中有多个类对象存在,对象析构时的顺序与构造的顺序相反。

YSC1-5

※若在类的定义中没有定义析构函数,C++编译器将自动产生缺省的析构函数。该函数无参,也不做任何实质性的工作。因为在对象被创建时自动调用析构函数同样是“例行公事”。

※构造函数和析构函数无函数返回值,所以,该函数也无须定义函数类型。

※若有动态分配内存的操作,定义构造函数和析构函数是十分必要的

还可以根据需要在类定义中定义拷贝构造函数和赋值函数。

拷贝构造函数:特殊的构造函数。

调用拷贝构造函数的情况:

⑴当用已经存在(构造完毕)的同类对象(初始值对象)的引用作为参数,初始化构造新建立的对象时将调用拷贝构造函数。

函数是在构造新的对象时被调用执行的。函数的参数必须是同类对象的引用。

相关文档
最新文档