您好,登錄后才能下訂單哦!
本篇文章為大家展示了C++抽象數據類型指的是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
我們在學數據結構的時候,經常遇到的一個概念就是抽象數據類型(Abstract Data Type),簡稱ADT。
維基百科中的定義是:抽象數據類型是計算機科學中具有類似行為的特定類別的數據結構的數學模型,或者具有類似語義的一種或多種程序設計語言的數據類型。
從這段定義來看,非常地費解,其實我們只需要抓住核心。核心就是接口和實現的分離。我們在使用一個ADT的時候,只需要和接口進行交互,而不必關心接口中的實現細節。同樣,數據也是隱藏不可見的,也需要通過接口進行交互。
也就是說接口是數據類型唯一的交互方式,除此之外,用戶無法接觸到ADT的數據以及實現細節。
舉個例子:以棧舉例,如果我們不將棧設計成ADT,那么用戶在使用棧的時候,可能就需要自己創建一個數組來存儲棧中的數據,通過調用一些方法來實現棧的功能。但這勢必需要用戶了解棧的原理,以及數據存儲的細節。ADT會做一個良好的封裝,用戶只需要了解每個接口的功能,調用對應的接口實現自己想要的邏輯即可。
我們來看一下C++ Primer當中實現的棧的例子。
首先,我們需要知道棧一共有哪些接口,大概有如下這么幾個:
創建空棧
可添加數據到棧頂
可從棧頂彈出數據
可查看棧是否為空
可查看棧是否已滿
然后,我們遵守C++
中面向對象的設計思路,將它封裝在一個類當中。
首先我們來定義這個類:
#ifndef STACK__H_ #define STACK__H_ typedef unsigned long Item; class Stack { private: enum {MAX=10}; Item items[MAX]; int top; public: Stack(); bool isempty() const; bool isfull() const; bool push(const Item &item); bool pop(Item &item); }; #endif
我們來看下這個定義,會發現,其中的數據都被設定成了private
,也就是用戶無法直接訪問到數據。只能通過public
的接口進行交互,也無須關心其中的實現細節,可以當做黑盒使用。
最后, 我們再來看下C++ Primer當中給出的實現:
#include "stack.h" Stack::Stack() { top = 0; } bool Stack::isempty() const { return top == 0; } bool Stack::isfull() const { return top == MAX; } bool Stack::push(const Item &item) { if (top < MAX) { items[top++] = item; return true; } return false; } bool Stack::pop(Item &item) { if (top > 0) { item = items[--top]; return true; } return false; }
上述內容就是C++抽象數據類型指的是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。