位置:首页 > 高级语言 > C++在线教程 > C++数据抽象

C++数据抽象

数据抽象是指,只提供必要的信息提供给外界,并隐藏其后台的细节,也就是,以表示在程序所需要的信息,而无需呈现的细节。

数据抽象是一种编程(设计)技术,它依赖于接口和实现的分离。

一个现实生活中的例子:一台电视机,可以打开和关闭,换频道,调整音量,并添加外部组件,如扬声器,录像机和DVD播放器,但你不知道它的内部细节,即是,不知道它是如何在空中或通过电缆,如何转化接收信号,并最终在屏幕上显示出来。

因此,我们可以说,电视显然其外部接口的分开内部实现,可以使用它的接口,如电源键,频道转换和音量控制播放,而无需了解其内部零件知识。

现在就C++编程而言,C++类提供的数据抽象很高水平。它们提供足够的公共方法向外界的对象功能发挥和操纵对象数据,即,不用知道类如何在内部实现。

例如,程序中可以调用sort()函数不知道什么算法函数实际使用给定值进行排序。事实上,底层实现的排序功能可以在库版本之间切换,只要接口保持不变,函数调用仍然可以工作。

在C++中,我们使用类来定义自己的抽象数据类型(ADT)。可以使用ostream类的cout对象流数据,以这样的标准输出:

#include <iostream>
using namespace std;

int main( )
{
   cout << "Hello C++" <<endl;
   return 0;
}

在这里,不需要了解cout如何在用户屏幕上显示文字。只需要知道的公共接口和cout的底层实现可自由改变。

访问标签强制抽象:

在C++中,我们使用访问标签来定义的抽象接口类。一个类可以包含零个或多个接入标签:

  • 使用公共标签定义的成员都可以访问该程序的所有部分。一个类型的数据的抽象视图是由它的公共成员来定义。

  • 使用私有标签定义的成员无法访问到使用类代码。私有部分隐藏代码,使用类型的实现。

有关于如何经常访问的标签可能出现没有任何限制。每个访问的标签指定随后的成员定义的访问级别。指定的访问级别一直有效,直到下一次访问标签遇到或类主体的关闭右括号都被认为是。

数据抽象的好处:

数据抽象提供了两个重要的优势:

  • 类的内部受到保护,不受无意的用户级错误,这可能会损坏对象的状态。

  • 这个类实现可能随着时间的推移在应对不断变化的需求或错误报告,而无需改变用户级代码。

通过定义数据成员只在类的私有部分,该类作者可随意更改数据。如果实现转换,只有类代码需要检查,看看有什么影响变化可能。如果数据是公开,然后直接访问旧表示的数据成员的任何函数可能被打破。

数据抽象例子:

在这里实现一个类的公共和私有成员,任何C++程序是数据抽象的一个例子。考虑下面的例子:

#include <iostream>
using namespace std;

class Adder{
   public:
      // constructor
      Adder(int i = 0)
      {
        total = i;
      }
      // interface to outside world
      void addNum(int number)
      {
          total += number;
      }
      // interface to outside world
      int getTotal()
      {
          return total;
      };
   private:
      // hidden data from outside world
      int total;
};
int main( )
{
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);

   cout << "Total " << a.getTotal() <<endl;
   return 0;
}

让我们编译和运行上面的程序,这将产生以下结果:

Total 60

上面的类增加了数字相加,并返回总和的功能。公有成员addNum和getTotal是外面世界的接口,用户需要知道它们使用的类。私有成员总和是什么,用户不需要了解,只需要类能正常工作。

设计策略:

抽象的代码分离到接口和实现。所以在设计组件时,必须保持独立的接口执行,这样,如果改变底层实现,那么接口将保持不变。

在任何程序使用接口这种情况下,它们不会受到影响,将只需要使用最新的执行重新编译。