《c++primer》ch7 類

類是面向?qū)ο缶幊痰幕A(chǔ)肥败,使用類定義自己的數(shù)據(jù)類型族跛,可以更方便的解決問題中的各種概念,使我們更容易編寫举娩、調(diào)試和修改程序析校。

7.1 定義抽象的數(shù)據(jù)類型

  • 定義在類內(nèi)部的函數(shù)時隱式的inline函數(shù)。
  • 類的所有成員都必須在類的內(nèi)部聲明铜涉,但是成員函數(shù)體可以定義在類的內(nèi)部或外部智玻。
  • 成員函數(shù)通過一個名為this的額外的隱式參數(shù)來訪問調(diào)用它的那個對象。當(dāng)我們調(diào)用一個成員函數(shù)時芙代,用請求該函數(shù)的對象地址初始化this吊奢。
  • 成員函數(shù)體可以隨意使用類中的其他成員而不需要在意這些成員出現(xiàn)的次序。

構(gòu)造函數(shù)

編譯器創(chuàng)建的構(gòu)造函數(shù)又被稱為合成的默認(rèn)構(gòu)造函數(shù)纹烹,合成的默認(rèn)構(gòu)造函數(shù)初始化類的數(shù)據(jù)成員規(guī)則為:存在類內(nèi)初始值的時候页滚,用它來初始化成員召边;否則,默認(rèn)初始化該成員逻谦。
對于一個普通的類掌实,一般要定義自己的默認(rèn)構(gòu)造函數(shù):

  1. 編譯器只有在發(fā)現(xiàn)類不包含任何構(gòu)造函數(shù)的情況下才會替我們生成一個默認(rèn)的構(gòu)造函數(shù)。
  2. 對于某些類來說邦马,合成的默認(rèn)構(gòu)造函數(shù)可能執(zhí)行錯誤的操作贱鼻。
  3. 有的時候編譯器不能為某些類合成默認(rèn)的構(gòu)造函數(shù)。
  • 構(gòu)造函數(shù)沒有返回類型滋将。

拷貝邻悬。賦值和析構(gòu)

除了定義類的對象如何初始化之外,類還需要控制拷貝随闽、賦值和銷毀對象的時候發(fā)生的行為父丰。
當(dāng)我們不主動定義這些操作的的時候,編譯器將替我們合成他們掘宪。但是有些類不能依賴于合成的版本蛾扇。當(dāng)類需要分配類對象之外的資源時,合成的版本常常會失效魏滚。

7.2 訪問控制與封裝

在類的定義中镀首,可以包含0個或多個訪問說明符,每個訪問說明符指定接下來的成員訪問級別鼠次,一般來說更哄,作為接口的一部分,構(gòu)造函數(shù)和一部分成員函數(shù)應(yīng)該定義在public說明符之后腥寇,而數(shù)據(jù)成員和作為實(shí)現(xiàn)部分的函數(shù)跟在private說明符之后成翩。
class和struct唯一的區(qū)別是默認(rèn)訪問權(quán)限不同。

7.3 類的其他特性

類型成員赦役、類的成員的類內(nèi)初始值麻敌、可變數(shù)據(jù)成員、內(nèi)聯(lián)數(shù)據(jù)成員扩劝、從成員函數(shù)返回*this庸论、關(guān)于如何定義類類型及友元類等。

類成員

除了定義數(shù)據(jù)和函數(shù)成員之外棒呛,類還可以自定義某種類型在類中的別名聂示。由類定義的類型名字和其他成員一樣存在訪問限制。

另成員作為內(nèi)聯(lián)函數(shù)

在類中簇秒,一些規(guī)模較小的函數(shù)常被定義為內(nèi)聯(lián)函數(shù)
兩種方式:1鱼喉、直接把函數(shù)定義放在類的內(nèi)部
2、把函數(shù)定義放在類的外部,顯式的使用inline

  • 一個const成員函數(shù)如果以引用的形式返回*this扛禽,那么它的返回類型將是常量引用锋边。
  • 在實(shí)踐中,設(shè)計良好的代碼常常包含很多的小函數(shù)编曼,通過調(diào)用這些小函數(shù)豆巨,可以完成其他一組函數(shù)的“實(shí)際”工作。

類類型

  • 對于一個類來說掐场,它的成員和其他任何類的成員都不是一回事往扔。
  • 類的聲明:不完全類型的使用:可以定義指向這種類型的指針或引用,也可以聲明(但不能完全定義)以不完全類型作為參數(shù)或者返回類型的函數(shù)熊户。

友元

如果一個類指定了友元類萍膛,則友元類的成員函數(shù)可以訪問此類中包括非公有成員在內(nèi)的所有成員。

  • 還可以另一個類的成員函數(shù)為自己的友元嚷堡。
  • 如果一個類想把一組重載函數(shù)聲明稱它的友元蝗罗,需要對每一個分別聲明。
  • 友元關(guān)系不存在傳遞性蝌戒。每個類負(fù)責(zé)控制自己的友元類或友元函數(shù)串塑。

類的作用域

  • 一個類就是一個作用域
  • 函數(shù)的返回類型通常出現(xiàn)在函數(shù)名之前,所以返回類型是在類的作用域外的北苟。
  • 名字查找規(guī)則:首先名字所在快尋找聲明語句拟赊;查找外層作用;報錯粹淋。

構(gòu)造函數(shù)再探

  • 如果成員是const或引用的話,必須進(jìn)行初始化瑟慈;當(dāng)成員屬于某種類類型且該類沒有定義構(gòu)造函數(shù)時桃移,也必須初始化。
  • 使用構(gòu)造函數(shù)初始值:不僅僅是底層效率的問題葛碧。另有一些數(shù)據(jù)成員必須被初始化借杰。
  • 成員初始化順序:構(gòu)造函數(shù)初始化列表值說明用于初始化成員的值,而不限定初始化的具體執(zhí)行順序进泼。(盡量按照順序初始化蔗衡,并且避免使用某些成員初始化其他成員)
  • 委托構(gòu)造函數(shù):
  • 默認(rèn)構(gòu)造函數(shù)的作用:當(dāng)對象被默認(rèn)初始化或值初始化時自動執(zhí)行默認(rèn)構(gòu)造函數(shù)
  • 默認(rèn)初始化發(fā)生:
  1. 塊作用域內(nèi)不適用任何初始值定義一個非靜態(tài)變量或數(shù)組時。
  2. 一個類本身含有類類型的成員且使用合成的默認(rèn)構(gòu)造函數(shù)乳绕。
  3. 類類型的成員沒有在構(gòu)造函數(shù)初始值列表中顯式的初始化绞惦。
  • 值初始化發(fā)生:
  1. 數(shù)組初始化時提供的初始值數(shù)量小于數(shù)組的大小
  2. 不使用初始值定義一個局部的靜態(tài)變量
  3. 書寫形如T()的表達(dá)式顯式的請求值初始化
  • 隱式的類類型轉(zhuǎn)換:能通過一個實(shí)參調(diào)用的構(gòu)造函數(shù)定義一條從構(gòu)造函數(shù)的參數(shù)類型向類類型隱式轉(zhuǎn)換的規(guī)則:
string null_book="2132321";
item.combine(null_book);//將一個string的實(shí)參傳遞給了combine成員。
  • 隱式類型轉(zhuǎn)換只能一步洋措,可以使用explicit阻止隱式類型轉(zhuǎn)換济蝉。
  • 字面值常量類至少提供一個constexpr構(gòu)造函數(shù)

類的靜態(tài)成員

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子王滤,更是在濱河造成了極大的恐慌贺嫂,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雁乡,死亡現(xiàn)場離奇詭異第喳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)踱稍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門曲饱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寞射,你說我怎么就攤上這事渔工。” “怎么了桥温?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵引矩,是天一觀的道長。 經(jīng)常有香客問我侵浸,道長旺韭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任掏觉,我火速辦了婚禮区端,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘澳腹。我一直安慰自己织盼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布酱塔。 她就那樣靜靜地躺著沥邻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪羊娃。 梳的紋絲不亂的頭發(fā)上唐全,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機(jī)與錄音蕊玷,去河邊找鬼邮利。 笑死,一個胖子當(dāng)著我的面吹牛垃帅,可吹牛的內(nèi)容都是我干的延届。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贸诚,長吁一口氣:“原來是場噩夢啊……” “哼祷愉!你這毒婦竟也來了窗宦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤二鳄,失蹤者是張志新(化名)和其女友劉穎赴涵,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體订讼,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡髓窜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了欺殿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寄纵。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖脖苏,靈堂內(nèi)的尸體忽然破棺而出程拭,到底是詐尸還是另有隱情,我是刑警寧澤棍潘,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布恃鞋,位于F島的核電站,受9級特大地震影響亦歉,放射性物質(zhì)發(fā)生泄漏恤浪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一肴楷、第九天 我趴在偏房一處隱蔽的房頂上張望水由。 院中可真熱鬧,春花似錦赛蔫、人聲如沸砂客。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鞭盟。三九已至,卻和暖如春瑰剃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背筝野。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工晌姚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人歇竟。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓挥唠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親焕议。 傳聞我的和親對象是個殘疾皇子宝磨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容