数据抽象
数据抽象主要只向外界提供接口和关键信息,但隐藏其后台的具体实现细节。
我们数据抽象主要依靠C++的类来实现,而我们知道类中访问标签分为共有、私有和保护三种。
公有标签定义的成员可以访问该程序的所有部分。
而私有标签的成员却无法访问到使用类的代码。
这样说可能优点抽象,我们来谈一下为什么这样抽象,或者数据抽象的好处
- 类的内部会受到保护,不会因为用户某些错误导致对象状态出问题
- 类可以应对更新需求。
所以,我们一般只在类的私有部分定义数据成员,这样我们更改数据就很方便,比如我们某个数据更改会导致哪些影响。(意思是说,如果数据是共有的,那么我们直接访问旧数据成员的函数可能数据的影响。)
即,我们在设计数据抽象时,将代码和接口分开,独立实现,即使改变底层实现,也不会改变当前接口,只需要将最新的底层实现重新编译即可。
如果上述内容觉得繁琐,可以记住下面这句话
数据成员,统一放入类的私有部分,这样我们操作数据成员会被限制在类中,出问题了方便改。
这和我们初学c语言时,规范要求把数据操作写成函数是一个道理。
数据封装
我们刚刚谈到数据抽象,数据抽象主要是为了只向用户提供接口而隐藏实现细节
这里说的数据封装主要是未了把数据和函数捆绑在一起,这样能避免受到外界的干扰和误用,从而确保安全。
比如我们下面这个代码:
class Box
{
public:
double getVolume(void)
{
return length * breadth * height;
}
private:
double length; // 长度
double breadth; // 宽度
double height; // 高度
};
private内部私有定义了数据,但是我们对其抽象主要还是出于安全考虑,用还是得用的,所以我们要通过public关键字定义一个接口来访问它们,这样我们就既考虑了安全性,又考虑了实用性。
不懂可以再看下面一个例子:
#include <iostream>
using namespace std