什么叫数据抽象?
比如说一架飞机,我们知道它会飞,但是怎么飞、飞行原理我们并不清楚。
因此,我们可以说飞机把它的内部实现和外部接口分离开了,我们无需知道它的内部实现原理,直接通过它的外部接口(机票)就可以登机起飞。
就 C++ 编程而言,C++ 类为数据抽象提供了可能。它们向外界提供了大量用于操作对象数据的公共方法,也就是说,外界实际上并不清楚类的内部实现。
例如,您的程序可以调用abs() 函数,而不需要知道函数中区整数绝对值所用到的算法。实际上,函数的底层实现会因库的版本不同而有所差异,只要接口不变,函数调用就可以照常工作。
在 C++ 中,我们使用类来定义我们自己的抽象数据类型(ADT)。您可以使用类 iostream 的 cout 对象来输出数据到标准输出,如下所示:
#include<iostream>
using namespace std;
int main() {
cout << "Hello EIDorado" << endl;
return 0;
}
我们并不知道也不需要知道cout的工作原理,只需要知道cout这个公共接口就可以使用,底层实现不需要去关注太多。
数据抽象的好处
类的内部受到保护,不会因无意的用户级错误导致对象状态受损。
类实现可能随着时间的推移而发生变化,以便应对不断变化的需求,或者应对那些要求不改变用户级代码的错误报告。
下面我们来看一下抽象类型怎么写
#include <iostream>
using namespace std;
class Adder{
public:
// 构造函数
Adder(int i = 0)
{
total = i;
}
// 对外的接口
void addNum(int number)
{
total += number;
}
// 对外的接口
int getTotal()
{
return total;
};
private:
// 用户并不清楚有total这块内存,这是用户不需要了解的,但又是类能正常工作所必需的。
int total;
};
int main( )
{
Adder a;
a.addNum(10);
a.addNum(20);
a.addNum(30);
cout << "Total " << a.getTotal() <<endl;
return 0;
}