C++ 語言類 (class) 和抽象數(shù)據(jù)類型 (abstract data type)
在 C++ 語言中,我們使用類定義自己的數(shù)據(jù)類型。通過定義新的類型來反映待解決問題中的各種概念,從而使得程序更加簡潔旦易于修改。數(shù)據(jù)抽象能幫助我們將對象的具體實現(xiàn)與對象所能執(zhí)行的操作分離開來。
類的兩項基本能力:一是數(shù)據(jù)抽象,即定義數(shù)據(jù)成員和函數(shù)成員的能力;二是封裝, 即保護類的成員不被隨意訪問的能力。通過將類的實現(xiàn)細節(jié)設(shè)為 private
,我們就能完成類的封裝。類可以將其他類或者函數(shù)設(shè)為友元,這樣它們就能訪問類的非公有成員了。
接口 (interface) 是類型提供的 (公有) 操作。通常情況下,接口不包含數(shù)據(jù)成員。
1. 抽象數(shù)據(jù)類型
抽象數(shù)據(jù)類型 (abstract data type) 是封裝 (隱藏) 了實現(xiàn)細節(jié)的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)抽象 (data abstraction) 著重關(guān)注類型接口的一種編程技術(shù)。數(shù)據(jù)抽象令程序員可以忽略類型的實現(xiàn)細節(jié),只關(guān)注類型執(zhí)行的操作即可。數(shù)據(jù)抽象是面向?qū)ο缶幊毯头盒途幊痰幕A(chǔ)。
類的基本思想是數(shù)據(jù)抽象 (data abstraction) 和封裝 (encapsulation)。數(shù)據(jù)抽象是一種依賴于接口 (interface) 和實現(xiàn) (implementation) 分離的編程技術(shù)。類的接口包括用戶所能執(zhí)行的操作:類的實現(xiàn)則包括類的數(shù)據(jù)成員、負責接口實現(xiàn)的函數(shù)體以及定義類所需的各種私有函數(shù)。封裝實現(xiàn)了類的接口和實現(xiàn)的分離。封裝后的類隱藏了它的實現(xiàn)細節(jié),類的用戶只能使用接口而無法訪問實現(xiàn)部分。
類要想實現(xiàn)數(shù)據(jù)抽象和封裝,需要首先定義一個抽象數(shù)據(jù)類型 (abstract data type)。在抽象數(shù)據(jù)類型中,由類的設(shè)計者負責考慮類的實現(xiàn)過程:使用該類的程序員則只需要抽象地思考類型做了什么,而無須了解類型的工作細節(jié)。
封裝 (encapsulation) 分離類的實現(xiàn)與接口,從而隱蔵了類的實現(xiàn)細節(jié)。在 C++ 語言中,通過把實現(xiàn)部分設(shè)為 private
完成封裝的任務(wù)。
2. 不同的編程角色
程序員們常把運行其程序的人稱作用戶 (user)。類的設(shè)計者也是為其用戶設(shè)計并實現(xiàn)一個類的人。類的用戶是程序員,而非應(yīng)用程序的最終使用者。
3. 類 (class)
類 (class) 是 C++ 提供的自定義數(shù)據(jù)類型的機制。類可以包含數(shù)據(jù)、函數(shù)和類型成員,一個類定義一種新的類型和一個新的作用域。
類可以定義一種特殊的成員函數(shù):構(gòu)造函數(shù),其作用是控制初始化對象的方式。構(gòu)造函數(shù)可以重載,構(gòu)造函數(shù)應(yīng)該使用構(gòu)造函數(shù)初始值列表來初始化所有數(shù)據(jù)成員。
類還能定義可變或者靜態(tài)成員。一個可變成員永遠都不會是 const
,即使在 const
成員函數(shù)內(nèi)也能修改它的值:一個靜態(tài)成員可以是函數(shù)也可以是數(shù)據(jù),靜態(tài)成員存在于所有對象之外。文章來源:http://www.zghlxwxcb.cn/news/detail-409086.html
References
(美) Stanley B. Lippman, (美) Josée Lajoie, (美) Barbara E. Moo 著, 王剛, 楊巨峰 譯. C++ Primer 中文版[M]. 第 5 版. 電子工業(yè)出版社, 2013.
https://www.informit.com/store/c-plus-plus-primer-9780321714114文章來源地址http://www.zghlxwxcb.cn/news/detail-409086.html
到了這里,關(guān)于C++ 語言類 (class) 和抽象數(shù)據(jù)類型 (abstract data type)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!