久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 學習筆記 > 嵌入式(shi)學習筆(bi)記:類(lei)與封裝(zhuang)基礎入門知識分享(xiang)

嵌入(ru)式學習筆(bi)記:類(lei)與封裝基礎入(ru)門(men)知識分享 時間(jian):2018-09-05      來(lai)源:未知

c++是學(xue)習任何(he)一門IT技術(shu)都必須要學(xue)的(de),在(zai)c++的(de)學(xue)習重點(dian)和(he)難點(dian)也就是類(lei)與封(feng)(feng)裝(zhuang)了,在(zai)這里我(wo)這只老鳥總結(jie)出(chu)了一些類(lei)與封(feng)(feng)裝(zhuang)基礎(chu),比較全面(mian),對c++類(lei)與封(feng)(feng)裝(zhuang)的(de)入(ru)門學(xue)習必備。

一、如何定義類

定(ding)義(yi)一(yi)(yi)個類,本質上(shang)是定(ding)義(yi)一(yi)(yi)個數據類型的藍圖。這實際上(shang)并沒(mei)有定(ding)義(yi)任何數據,但它(ta)定(ding)義(yi)了(le)(le)類的名(ming)稱意味(wei)著什么(me),也就是說,它(ta)定(ding)義(yi)了(le)(le)類的對(dui)象(xiang)包括(kuo)了(le)(le)什么(me),以(yi)及可以(yi)在這個對(dui)象(xiang)上(shang)執行哪些操(cao)作。

類(lei)(lei)定義(yi)是以關鍵字 class 開(kai)頭,后跟(gen)類(lei)(lei)的名稱。類(lei)(lei)的主體是包含在一(yi)(yi)對(dui)花括號中。類(lei)(lei)定義(yi)后必須跟(gen)著一(yi)(yi)個分號或一(yi)(yi)個聲明(ming)列表。

class 類名(ming)

{

成員。。。。

};

訪問限定符:

private: 私有成(cheng)員變量或函數在類的外部是(shi)不可(ke)訪(fang)(fang)問(wen)的,甚至是(shi)不可(ke)查看的。只有類和(he)友元(yuan)函數可(ke)以訪(fang)(fang)問(wen)私有成(cheng)員。

public: 公有成員在程序(xu)中類(lei)的外部(bu)是可(ke)訪(fang)問的。可(ke)以(yi)不使用任何成員

函數來設(she)置(zhi)和獲取公(gong)有變量(liang)的(de)值

protected:保(bao)護成(cheng)員變量或(huo)函數與私(si)有成(cheng)員十分相(xiang)似,但(dan)有一點(dian)不

同,保護成(cheng)員在派生類(即子類)中是可(ke)訪問的。

什(shen)么(me)是類的(de)內部(bu)和類的(de)外部(bu)?

在(zai)(zai)類的(de)作用(yong)域范圍(wei)內叫(jiao)(jiao)類的(de)內部,在(zai)(zai)類的(de)作用(yong)域訪(fang)問外(wai)叫(jiao)(jiao)類的(de)外(wai)部

注意:定義類的(de)時候,類的(de)成員函數可以在(zai)(zai)類的(de)內部(bu)聲明,在(zai)(zai)類的(de)外部(bu)定義,在(zai)(zai)外部(bu)定義的(de)時候需(xu)要加作用域。

在(zai)表(biao)(biao)示(shi)數據類(lei)(lei)型(xing)(xing)的時候(hou),class可以省(sheng)略,直接用類(lei)(lei)名(ming)表(biao)(biao)示(shi)數據類(lei)(lei)型(xing)(xing)。

class 和struct 有什么(me)區別?

在不加訪問(wen)限(xian)定符的(de)情況(kuang)下,class的(de)成員默(mo)認是私有(you)屬性,struct 的(de)成員默(mo)認是公(gong)有(you)屬性。

對象和類的關(guan)系(xi):

類是(shi)某一事物的(de)(de)抽象,類是(shi)數據類型(xing),對(dui)象是(shi)類的(de)(de)實例化,對(dui)象是(shi)變量名(ming)。

二、this指針

this指(zhi)針默認在非靜(jing)態的(de)成員函數中存在。

指(zhi)向當前對(dui)象的首地址(zhi),誰(shui)調用該成員函數,誰(shui)就是當前對(dui)象。this指(zhi)針在表示成員變量的時候可(ke)以省略

三、構造函數

 作(zuo)用(yong):初始化(hua)成員變量,初始化(hua)只會(hui)進行一次,所(suo)以任何一個對象只會(hui)

調用一次(ci)構造函(han)數

特點:

1.函數名(ming)和類名(ming)一樣

2.沒有返回值(zhi)

3.可以重載

4.如(ru)果沒有自定義構(gou)造函數,編譯器會提供默認(ren)的(de)構(gou)造函數進行初始化工作

5.如果自定義構造(zao)函數,對象初始化(hua)不會(hui)調用默認(ren)的構造(zao)函數,而(er)是調用自定義的構造(zao)函數

6.構(gou)造(zao)函數(shu)不需要主動調(diao)用,創(chuang)建對象的(de)時候會自(zi)動調(diao)用構(gou)造(zao)函數(shu)進行初始(shi)化

7.構造(zao)函數可以用初始(shi)化列表進(jin)行(xing)初始(shi)化

8.構造函數通常是公有(you)的,如(ru)果是非公有(you)將(jiang)無法創建(jian)對象(xiang)

默認構造函數無入參(can),無打印(yin)。

拷(kao)貝(復制)構造(zao)函(han)數(shu) copy construct function

作用:用一個(ge)已經(jing)存在的(de)(de)對(dui)象(xiang)給(gei)新(xin)創(chuang)建(jian)的(de)(de)對(dui)象(xiang)初始化(hua)。有默(mo)認(ren)的(de)(de)拷(kao)貝構造(zao)函數(shu),如果沒有自(zi)定義(yi),就用默(mo)認(ren)的(de)(de)。如果自(zi)定義(yi)拷(kao)貝構造(zao)函數(shu),只會調用自(zi)定義(yi)的(de)(de)拷(kao)貝構造(zao)函數(shu)默(mo)認(ren)構造(zao)函數(shu)屬于淺拷(kao)貝

深拷貝(bei)和(he)淺拷貝(bei)

淺拷貝(bei): 棧內(nei)存之間數據(ju)的拷貝(bei)

深(shen)拷(kao)貝: 堆內存(cun)之間(jian)數據的(de)拷(kao)貝四、析構函數

作用:在(zai)對(dui)象(xiang)生命(ming)周期結束的時候,回收對(dui)象(xiang)的資(zi)源(內存)

特點:

1.函數名是類名前加~

2.沒有返回值(zhi)

3.沒有入(ru)參,不能(neng)進行(xing)函數重載(zai)

4.如果沒(mei)有(you)自定義析構函(han)數,編(bian)譯器會提供(gong)默認的析構函(han)數(默認析構函(han)數無(wu)打印,且只會釋放棧內存空間)

5.如果(guo)自定義析(xi)構函數,不會用默(mo)認的析(xi)構函數,只會用自定義的析(xi)構函數

6.析構函數不需(xu)要(yao)主動(dong)調(diao)(diao)用(yong),在對象生(sheng)命周期(qi)結束的(de)時候自動(dong)調(diao)(diao)用(yong)

7.如果(guo)主(zhu)動(dong)調用析(xi)(xi)構函(han)數(shu),只(zhi)是執行析(xi)(xi)構函(han)數(shu)體中的(de)內(nei)容,并不會改變對象的(de)生命周期。

構(gou)造函(han)(han)數(shu)和(he)析構(gou)函(han)(han)數(shu)的順序?

構造函數按照(zhao)程序執行的順序進(jin)行構造。

析(xi)構(gou)函(han)數的執(zhi)行順(shun)序由對象的生命周期來決定:

堆內存(cun)的數據是(shi)人為釋放,當你忘(wang)了人為釋放時在(zai)程序(xu)結束(shu)后會自動釋放;

棧的內存(cun)在(zai)函數結(jie)束以(yi)后(hou)就釋(shi)放,析構(gou)函數的順序(xu)和構(gou)造函數相反。

靜態數據(ju)區的(de)內存在(zai)程序結束以后才釋(shi)放,同樣和構(gou)造的(de)順序相反。

對象的內存(cun)空(kong)間(jian)有多大?

等(deng)于對象(xiang)的(de)(de)成(cheng)員變量(liang)(liang)的(de)(de)內(nei)存大小(xiao)之和(滿足字節對齊(qi))當對象(xiang)沒有成(cheng)員變量(liang)(liang),對象(xiang)的(de)(de)內(nei)存大小(xiao)為1個字節

總結:

定義一個(ge)類,默認有哪些成員函(han)數(shu)和(he)運算符可以(yi)直接(jie)使用(yong)?1.構造函(han)數(shu)

2.析構函數

3.拷(kao)貝構造函(han)數

4.賦值運算符

5.&取地址運算符

四(si)、靜態成員

加上static修飾的成(cheng)員叫靜態成(cheng)員,特點:屬于該類的所有對象共享的

1.靜(jing)態(tai)成員變(bian)量(liang) 本質上是全(quan)局變(bian)量(liang),所(suo)以需(xu)要在全(quan)局范圍(wei)聲(sheng)明,靜(jing)態(tai)成員變(bian)量(liang)的內存在靜(jing)態(tai)數(shu)據區,只有一份,不(bu)在對象(xiang)的內存空間內。

2.靜(jing)態(tai)成(cheng)(cheng)(cheng)員(yuan)函數 可(ke)以通過類(lei)名::函數名,直接(jie)調(diao)用靜(jing)態(tai)成(cheng)(cheng)(cheng)員(yuan)函數,靜(jing)態(tai)成(cheng)(cheng)(cheng)員(yuan)函數沒有this指針(zhen)。靜(jing)態(tai)成(cheng)(cheng)(cheng)員(yuan)函數訪問(wen)不了非靜(jing)態(tai)的成(cheng)(cheng)(cheng)員(yuan)變量非靜(jing)態(tai)成(cheng)(cheng)(cheng)員(yuan)函數可(ke)以訪問(wen)靜(jing)態(tai)成(cheng)(cheng)(cheng)員(yuan)變量

五、只讀成員

被const修飾的成(cheng)員(yuan)叫只(zhi)讀成(cheng)員(yuan),只(zhi)讀成(cheng)員(yuan)只(zhi)能讀不(bu)能寫,不(bu)能做左值(zhi)。

1.只讀(du)成員變量(liang) 在初始化(hua)的時候只能(neng)用初始化(hua)列表(biao)

2.只(zhi)(zhi)讀(du)成員(yuan)函(han)數(shu) 不(bu)(bu)能(neng)修改成員(yuan)變量的(de)(de)值。只(zhi)(zhi)讀(du)成員(yuan)函(han)數(shu)不(bu)(bu)能(neng)調用(yong)非只(zhi)(zhi)讀(du)的(de)(de)成員(yuan)函(han)數(shu),非只(zhi)(zhi)讀(du)的(de)(de)成員(yuan)函(han)數(shu)可以調用(yong)只(zhi)(zhi)讀(du)的(de)(de)成員(yuan)函(han)數(shu)

3.只(zhi)讀(du)對(dui)(dui)象 該對(dui)(dui)象只(zhi)能(neng)讀(du)不能(neng)寫 mutable 關鍵(jian)字 (可(ke)變的)

被mutable修飾的變量不受const的約束三、友(you)元

類(lei)(lei)的(de)好友(you)(you)叫友(you)(you)元(yuan)。友(you)(you)元(yuan)可以訪問(wen)類(lei)(lei)的(de)私有成員。

1.外(wai)部函數(shu)是(shi)友元(yuan) ***** 該外(wai)部函數(shu)可以訪問本類的私有成員(yuan)

2.外部(bu)類是友元(yuan) *** 外部(bu)友元(yuan)類的所有成(cheng)員函數都(dou)可以(yi)訪問(wen)本(ben)類的私(si)有成(cheng)員

3.外部(bu)類的成(cheng)(cheng)員函數是友元 *** 只有(you)(you)聲明為友元的成(cheng)(cheng)員函數可(ke)以(yi)訪問本類的私有(you)(you)成(cheng)(cheng)員,其他的成(cheng)(cheng)員函數不(bu)行(xing)

友元具不(bu)具有傳遞(di)性(xing)?

友元不具有傳遞性

友元的聲明不受訪問限(xian)定符(fu)的影響。總結(jie)什么(me)(me)是封裝(zhuang),封裝(zhuang)有(you)什么(me)(me)作用?

1.定義(yi)類,類中有(you)數據和方法(fa),模塊(kuai)化編程(cheng),提高(gao)編程(cheng)的效率。

2.通過訪問限定(ding)(ding)符,確定(ding)(ding)哪些成員是隱(yin)藏的,哪些是暴露在(zai)外的接口,為了數(shu)據安(an)全性。

友元破壞(huai)了封裝,需要謹慎使用。

六、運算符重載

為什么要進行運算符重載(zai)?

 1.運算(suan)符只(zhi)對基本(ben)數據(ju)類(lei)型有(you)效,對自定(ding)義的類(lei)類(lei)型無效。對象之間的運算(suan)必須要進行運算(suan)符重載

2.使用用運算符重載,使對象之間的運算變得簡單(dan),方便。

大部分運算符都可以被重載,只有如下(xia)不能(neng):

成員運(yun)算符(fu). 三目運(yun)算符(fu)?: sizeof運(yun)算符(fu) 作用(yong)域運(yun)算符(fu)::

運算符重(zhong)載(zai)的本質是特殊(shu)的函數:(函數名特殊(shu))

返回值類型 operator 運算符(入(ru)參列(lie)表。。。)

{

函(han)數(shu)體。。。。

}

類有哪些函數:

1.成員(yuan)函數(shu) 類(lei)的(de)組成部分,可以訪問類(lei)的(de)私(si)有成員(yuan),有this指針指代當前對象

2.友元函數 不是(shi)類的組成(cheng)部(bu)分(fen),可以類訪問(wen)私有(you)成(cheng)員,沒有(you)this指針

3.非友(you)元的(de)外部函數(shu) 不能訪問類的(de)私有(you)成員成員函數(shu)和(he)友(you)元函數(shu)做運算符重載有(you)什么區別?

友元函數比成(cheng)(cheng)員(yuan)函數做(zuo)相(xiang)同的(de)運算符重載多一個(ge)入參。原因:成(cheng)(cheng)員(yuan)函數有this指針可(ke)以指代一個(ge)對象。

注意:運算符重載不能改變(bian)運算符的優先級和(he)含義。

七、數據封裝

所有的 C++ 程序都有以(yi)下兩個基本要素(su):

程序語句(代碼(ma)):這是程序中執行動作(zuo)的部分,它們被稱為函數。

程序(xu)數據:數據是程序(xu)的信(xin)息,會受到(dao)程序(xu)函數的影響。

封裝(zhuang)是(shi)面向對象(xiang)編程中的(de)把數據和操作(zuo)數據的(de)函數綁定在一(yi)起的(de)一(yi)個概念,這樣能(neng)避免受到外界的(de)干擾和誤用,從而確保(bao)了安(an)全。數據封裝(zhuang)引申出(chu)了另一(yi)個重要(yao)的(de) OOP 概念,即數據隱(yin)藏(zang)。

數據(ju)封裝是一種把數據(ju)和操(cao)作數據(ju)的函數捆(kun)綁在一起的機制(zhi),數據(ju)抽象是一種僅向用戶暴露接(jie)口而把具體的實現細節(jie)隱藏起來的機制(zhi)。數據(ju)抽象

數(shu)據抽象是指,只向外界(jie)提供關鍵信息(xi),并隱藏其(qi)后臺的實現(xian)細(xi)節,即只表(biao)現(xian)必要的信息(xi)而不呈現(xian)細(xi)節。

數(shu)據抽象是一種(zhong)依賴于接口(kou)和實(shi)現分離(li)的編程(cheng)(設計)技術。

舉一(yi)個現實生活中的(de)真實例子(zi),比如(ru)一(yi)臺電視機,您可(ke)以(yi)打開和(he)關閉、切換頻道、調整音(yin)量、添加外部(bu)(bu)組件(如(ru)喇叭(ba)、錄像機、DVD 播放(fang)器),但是您不知道它的(de)內部(bu)(bu)實現細節,也就是說,您并(bing)不知道它是如(ru)何(he)(he)通過纜線接收信號(hao),如(ru)何(he)(he)轉換信號(hao),并(bing)最終顯(xian)示在屏幕上。

因(yin)此,我們可以說電(dian)視把它(ta)的內部(bu)實(shi)現和外(wai)(wai)部(bu)接口分離開(kai)了,您(nin)無需知道它(ta)的內部(bu)實(shi)現原理,直接通過它(ta)的外(wai)(wai)部(bu)接口(比如電(dian)源按(an)鈕、遙(yao)控(kong)器(qi)、聲量控(kong)制(zhi)器(qi))就(jiu)可以操(cao)控(kong)電(dian)視。

數據抽象的(de)好處

數據抽象(xiang)有兩個重要的優勢:

類的(de)內部(bu)受到保護,不會因無意的(de)用(yong)戶(hu)級(ji)錯(cuo)誤導致對(dui)象狀態受損。類實現可能隨著(zhu)時間的(de)推移而發生(sheng)變化,以便應(ying)(ying)對(dui)不斷變化的(de)需(xu)求,或者應(ying)(ying)對(dui)那些要求不改變用(yong)戶(hu)級(ji)代碼的(de)錯(cuo)誤報告。

如(ru)果只在類的(de)私有部分定義數據(ju)成員,編寫該類的(de)作者就(jiu)可(ke)以隨意(yi)更改數據(ju)。如(ru)果實現發生(sheng)改變(bian),則(ze)只需要檢查類的(de)代碼,看看這(zhe)個改變(bian)會導致哪些影響。如(ru)果數據(ju)是公(gong)有的(de),則(ze)任何(he)直(zhi)接(jie)訪問舊表(biao)示形式的(de)數據(ju)成員的(de)函數都可(ke)能受到影響。

上一篇:嵌入式學習筆記:C++繼承的三種方式,用實例教會你

下一篇:嵌入式學習筆記:C++ 異常及處理詳解,都是重點

熱(re)點文章(zhang)推薦(jian)
華(hua)清學(xue)員就(jiu)業榜單
高薪學員經驗分(fen)享
熱點新聞推薦
前(qian)臺專線:010-82525158 企業培訓(xun)洽談專線(xian):010-82525379 院校合作洽談(tan)專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部