Linux QT編程
前言
封裝是面向?qū)ο缶幊讨械陌褦?shù)據(jù)和操作數(shù)據(jù)的函數(shù)綁定在一起的一個(gè)概念,這樣能避免受到外界的干擾和誤用,從而確保了安全。數(shù)據(jù)封裝引申出了另一個(gè)重要的 OOP 概念,即數(shù)據(jù)隱藏。數(shù)據(jù)封裝是一種把數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)捆綁在一起的機(jī)制,數(shù)據(jù)抽象是一種僅向用戶暴露接口而把具體的實(shí)現(xiàn)細(xì)節(jié)隱藏起來的機(jī)制,C++ 通過創(chuàng)建類來支持封裝和數(shù)據(jù)隱藏(public、protected、private)。
在 C++程序中,任何帶有公有和私有成員的類都可以作為數(shù)據(jù)封裝和數(shù)據(jù)抽象的實(shí)例。通常情況下,我們都會(huì)設(shè)置類成員狀態(tài)為私有(private),除非我們真的需要將其暴露,這樣才能保證良好的封裝性。這通常應(yīng)用于數(shù)據(jù)成員,但它同樣適用于所有成員,包括虛函數(shù)。
一、數(shù)據(jù)封裝
是以狗類為例,增加一個(gè)食物的方法 addFood(int number)。將獲得食物的方法設(shè)定在 public 下,這樣 addFood(int number)方法就暴露出來了,也就是對外的接口。然后我們設(shè)置狗類的私有成員(private)食物的份數(shù) total。
然后我們還寫一個(gè)公開的方法 getFood()在 public 下,通過 getFood()來打印出小狗總共獲得了幾份食物。
新建一個(gè)目錄 10_encapsulation_example,編輯一個(gè) 10_encapsulation_example.cpp 內(nèi)容如下。
1 #include <iostream>
2 #include <string>
3 using namespace std;
4
5 class Dog
6 {
7 public:
8 string name;
9
10 Dog(int i = 0)
11 {
12 total = i;
13 }
14
15 void addFood(int number) {
16 total = total + number;
17 }
18
19 int getFood() {
20 return total;
21 }
22 private:
23 int total;
24 };
25
26
27 int main()
28 {
29 Dog dog;
30
31 dog.name = "旺財(cái)";
32
33 dog.addFood(3);
34 dog.addFood(2);
35
36 cout<<dog.name<<"總共獲得了"<<dog.getFood()<<"份食物"<<endl;
37
38 return 0;
39 }
第 10 至第 13 行,在構(gòu)造函數(shù)里初始化 total 的數(shù)量,不初始化 total 的數(shù)量默認(rèn)是隨 int 類型的數(shù)。所以我們需要在構(gòu)造函數(shù)里初始化,也體現(xiàn)了構(gòu)造函數(shù)的功能,一般是在構(gòu)造函數(shù)里初始化。不要在類內(nèi)直接賦值初始化。
第 15 至 17 行,addFood(int number),在這個(gè)方法里,將獲得的食物份數(shù)賦值給 total。
第 19 至 21,getFood(),在這個(gè)方法里,將返回食物的總份數(shù)。通過調(diào)用這個(gè)方法,即可訪問私有成員的 total 總數(shù)。
第 33 和 34 行,添加食物的份數(shù)。
第 36 行,打印食物的總份數(shù)。
然后我們編譯運(yùn)行文章來源:http://www.zghlxwxcb.cn/news/detail-466420.html
二、數(shù)據(jù)抽象
數(shù)據(jù)抽象是指,只向外界提供關(guān)鍵信息,并隱藏其后臺(tái)的實(shí)現(xiàn)細(xì)節(jié),即只表現(xiàn)必要的信息而不呈現(xiàn)細(xì)節(jié)。數(shù)據(jù)抽象是一種依賴于接口和實(shí)現(xiàn)分離的編程(設(shè)計(jì))技術(shù)。
數(shù)據(jù)抽象的好處:文章來源地址http://www.zghlxwxcb.cn/news/detail-466420.html
- 類的內(nèi)部受到保護(hù),不會(huì)因無意的用戶級錯(cuò)誤導(dǎo)致對象狀態(tài)受損。
- 類實(shí)現(xiàn)可能隨著時(shí)間的推移而發(fā)生變化,以便應(yīng)對不斷變化的需求,或者應(yīng)對那些要求不改變用戶級代碼的錯(cuò)誤報(bào)告。
舉個(gè)簡單的例子,比如我們生活中的手機(jī)。手機(jī)可以拍照、聽音樂、收音等等。這些都是手機(jī)上的功能,用戶可以直接使用。但是拍照的功能是如何實(shí)現(xiàn)的,是怎么通過攝像頭取像然后怎么在屏幕上顯示的過程,作為用戶是不需要知道的。也就是暴露的不用太徹底,用戶也不必須知道這種功能是如何實(shí)現(xiàn)的,只需要知道如何拍照即可。就 C++ 編程而言,C++ 類為數(shù)據(jù)抽象提供了可能。它們向外界提供了大量用于操作對象
數(shù)據(jù)的公共方法,也就是說,外界實(shí)際上并不清楚類的內(nèi)部實(shí)現(xiàn)。其實(shí)像 cout 這個(gè)對象就是一個(gè)公共的接口,我們不必要知道 cout 是如何在屏幕上顯示內(nèi)容的。cout 已經(jīng)在底層實(shí)現(xiàn)好了。
到了這里,關(guān)于Linux系統(tǒng)下imx6ull QT編程—— C++數(shù)據(jù)封裝與數(shù)據(jù)抽象(八)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!