zl程序教程

您现在的位置是:首页 >  其他

当前栏目

C++ 语言类 (class) 和抽象数据类型 (abstract data type)

2023-04-18 14:15:56 时间

C++ 语言类 (class) 和抽象数据类型 (abstract data type)

在 C++ 语言中,我们使用类定义自己的数据类型。通过定义新的类型来反映待解决问题中的各种概念,从而使得程序更加简洁旦易于修改。数据抽象能帮助我们将对象的具体实现与对象所能执行的操作分离开来。

类的两项基本能力:一是数据抽象,即定义数据成员和函数成员的能力;二是封装, 即保护类的成员不被随意访问的能力。通过将类的实现细节设为 private,我们就能完成类的封装。类可以将其他类或者函数设为友元,这样它们就能访问类的非公有成员了。

接口 (interface) 是类型提供的 (公有) 操作。通常情况下,接口不包含数据成员。

1. 抽象数据类型

抽象数据类型 (abstract data type) 是封装 (隐藏) 了实现细节的数据结构。数据抽象 (data abstraction) 着重关注类型接口的一种编程技术。数据抽象令程序员可以忽略类型的实现细节,只关注类型执行的操作即可。数据抽象是面向对象编程和泛型编程的基础。

类的基本思想是数据抽象 (data abstraction) 和封装 (encapsulation)。数据抽象是一种依赖于接口 (interface) 和实现 (implementation) 分离的编程技术。类的接口包括用户所能执行的操作:类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。封装实现了类的接口和实现的分离。封装后的类隐藏了它的实现细节,类的用户只能使用接口而无法访问实现部分。

类要想实现数据抽象和封装,需要首先定义一个抽象数据类型 (abstract data type)。在抽象数据类型中,由类的设计者负责考虑类的实现过程:使用该类的程序员则只需要抽象地思考类型做了什么,而无须了解类型的工作细节。

封装 (encapsulation) 分离类的实现与接口,从而隐蔵了类的实现细节。在 C++ 语言中,通过把实现部分设为 private 完成封装的任务。

2. 不同的编程角色

程序员们常把运行其程序的人称作用户 (user)。类的设计者也是为其用户设计并实现一个类的人。类的用户是程序员,而非应用程序的最终使用者。

3. 类 (class)

类 (class) 是 C++ 提供的自定义数据类型的机制。类可以包含数据、函数和类型成员,一个类定义一种新的类型和一个新的作用域。

类可以定义一种特殊的成员函数:构造函数,其作用是控制初始化对象的方式。构造函数可以重载,构造函数应该使用构造函数初始值列表来初始化所有数据成员。

类还能定义可变或者静态成员。一个可变成员永远都不会是 const,即使在 const 成员函数内也能修改它的值:一个静态成员可以是函数也可以是数据,静态成员存在于所有对象之外。

References

(美) Stanley B. Lippman, (美) Josée Lajoie, (美) Barbara E. Moo 著, 王刚, 杨巨峰 译. C++ Primer 中文版[M]. 第 5 版. 电子工业出版社, 2013.
https://www.informit.com/store/c-plus-plus-primer-9780321714114