在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ C/ 數(shù)據(jù)抽象
動態(tài)內(nèi)存
類和對象
接口 (抽象類)
結(jié)構(gòu)體
循環(huán)的類型
函數(shù)
數(shù)字
日期和時間
基本語法
多態(tài)
數(shù)據(jù)抽象
注釋
命名空間
字符串
預(yù)處理器
決策語句
修飾符的類型
鍙橀噺綾誨瀷
基本輸入輸出
操作符
數(shù)組
模板
多線程
繼承
Web 編程
信號處理
指針
存儲類型
概述
引用
常量
異常處理
開發(fā)環(huán)境
重載
變量作用域
數(shù)據(jù)類型
數(shù)據(jù)封裝
文件和流

數(shù)據(jù)抽象

數(shù)據(jù)抽象是指對外只提供基本信息并且隱藏他們的背景細節(jié),即只呈現(xiàn)程序中所需的信息而沒有提供細節(jié)。

數(shù)據(jù)抽象是一種編程(和設(shè)計)技術(shù),依賴于接口和實現(xiàn)的分離。

讓我們舉一個現(xiàn)實生活中的例子。一個電視,你可以打開和關(guān)閉,改變頻道,調(diào)整音量,并添加外部組件,比如揚聲器,錄像機,以及 DVD 播放器。但是你不知道它的內(nèi)部細節(jié),也就是說,你不知道它如何通過無線技術(shù)或者通過電纜接收信號,如何轉(zhuǎn)化信號,以及最后將信號顯示在屏幕上。

因此,我們可以說電視機實現(xiàn)了外部接口與內(nèi)部實現(xiàn)的清晰分離,你可以無需知道它的內(nèi)部具體實現(xiàn),就可以通過其外部接口比如電源按鈕,更換頻道,音量控制。

現(xiàn)在,如果我們談?wù)摰氖?C++ 編程, C++ 類提供了大量數(shù)據(jù)抽象的例子。他們提供了大量的針對外部世界的公有函數(shù)來滿足對象的功能或者操作對象數(shù)據(jù),即外部函數(shù)不知道類在內(nèi)部是如何實現(xiàn)的。

例如,你的程序可以在不知道函數(shù)實際使用什么算法來對給定的值進行排序的情況下調(diào)用 sort() 函數(shù)。事實上,排序功能的底層實現(xiàn)可以在不同版本之間變化,只要接口保持不變,你的函數(shù)調(diào)用將仍然起作用。

在 C++ 中,我們使用類來定義自己的抽象數(shù)據(jù)類型( ADT )。您可以使用類 ostream 的 cout 對象對流數(shù)據(jù)進行標(biāo)準(zhǔn)輸出如下:

    #include <iostream>
    using namespace std;

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

在這里,你不需要了解 cout 如何在用戶的屏幕上顯示文本。你只需要知道的公共接口和的 cout 底層實現(xiàn)是可以自由改變的。

訪問標(biāo)號實施抽象

在 C++ 中,我們使用訪問標(biāo)號定義抽象接口類。一個類可以包含零個或多個訪問標(biāo)簽:

  • 成員定義了一個公有標(biāo)號,程序的所有部分都可以訪問這個公共標(biāo)號。類型的數(shù)據(jù)抽象視圖由其公有成員定義。
  • 使用類的代碼不可以訪問帶有私有標(biāo)號的成員。對于使用類的代碼,私有部分隱藏了類的實現(xiàn)細節(jié)。

一個訪問標(biāo)號可以出現(xiàn)的次數(shù)通常是沒有限制的。每個訪問標(biāo)號指定了隨后的成員定義的訪問級別。這個指定的訪問級別持續(xù)有效,知道遇到下一個訪問標(biāo)號或看到類定義提的右花括號為止。

數(shù)據(jù)抽象的好處

數(shù)據(jù)抽象提供了兩個重要的優(yōu)勢:

  • 避免內(nèi)部出現(xiàn)無意的,可能破壞對象狀態(tài)的用戶級錯誤?!   ?/li>
  • 隨著時間的推移類實現(xiàn)可能會根據(jù)需求或缺陷報告來做出修改,但是這種修改無需改變用戶級代碼。

通過只在類的私有部分定義數(shù)據(jù)成員,類作者可以自由的對數(shù)據(jù)進行更改。如果實現(xiàn)更改,只需要檢查類的代碼看看這個改變可能造成什么影響。如果數(shù)據(jù)是公開的,那么任何可以直接訪問舊的數(shù)據(jù)成員的函數(shù)都可能遭到破壞。

數(shù)據(jù)抽象舉例

任何一個用公有和私有成員實現(xiàn)一個類的 C++ 程序都是數(shù)據(jù)抽象的一個例子??紤]下面的例子:

    #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;
    }

編譯和執(zhí)行上面的代碼時,它產(chǎn)生以下結(jié)果:

    Total 60

上面的類實現(xiàn)了把數(shù)字加起來,并且返回總和。公有成員 addNumgetTotal 是對外的接口,用戶需要知道他們才能使用的類。私有成員 total 是用戶不需要知道的,但是它是為保證程序正常運行類必要的。

設(shè)計策略

抽象使代碼分離成接口和實現(xiàn)。所以在設(shè)計你的組件的時候,你必須保持接口獨立于實現(xiàn),因此,你才能做到在改變底層實現(xiàn)時,界面將保持不變。

在這種情況下,無論任何程序使用這些接口,他們不會受到影響,只需要重新編譯最新的實現(xiàn)。

上一篇:字符串下一篇:動態(tài)內(nèi)存