名詞解釋
1.數(shù)據(jù)抽象
- 數(shù)據(jù)抽象是一種依賴于接口和實(shí)現(xiàn)分離的編程技術(shù)椭蹄。
- 令程序員可以忽略類型的實(shí)現(xiàn)細(xì)節(jié)坊萝,只關(guān)注類型執(zhí)行的操作
- 保證類內(nèi)數(shù)據(jù)的安全性宋下,不被隨意修改
2.構(gòu)造函數(shù)
- 對象創(chuàng)建時(shí)咙好,用來控制對象初始化過程的函數(shù)叫作構(gòu)造函數(shù)造挽。
- 構(gòu)造函數(shù)的任務(wù)是初始化類對象的數(shù)據(jù)成員
3.各種構(gòu)造函數(shù)
- 默認(rèn)構(gòu)造函數(shù):當(dāng)沒有提供任何實(shí)參時(shí)使用的構(gòu)造函數(shù)
- 顯式構(gòu)造函數(shù):可以用一個(gè)單獨(dú)的實(shí)參調(diào)用但是不能用于隱式轉(zhuǎn)換的構(gòu)造函數(shù)
- 合成默認(rèn)構(gòu)造函數(shù):沒有顯式地定義任何構(gòu)造函數(shù)類碱璃,編譯器會為其創(chuàng)建合成默認(rèn)構(gòu)造函數(shù)
4.友元
- 類向外部提供其非公有成員訪問權(quán)限的方式
- 友元的訪問權(quán)限和成員函數(shù)一樣
- 友元可以是類也可以是函數(shù)
5.拷貝構(gòu)造函數(shù)
- 將新對象初始化為同類型另一對象的副本
- 當(dāng)以傳值的方式向函數(shù)傳遞對象或者從函數(shù)返回對象時(shí)會隱式使用拷貝構(gòu)造函數(shù)
6.刪除的函數(shù)
- 不能使用的函數(shù)
- =delete
- 用途是告訴編譯器不要合成拷貝操作
7.析構(gòu)函數(shù)
- 釋放對象使用的資源弄痹,并銷毀對象的非靜態(tài)數(shù)據(jù)成員
- 當(dāng)對象離開作用域或者被釋放時(shí)進(jìn)行清理工作
- 編譯器會自動(dòng)銷毀每個(gè)數(shù)據(jù)成員。類類型的成員調(diào)用其析構(gòu)函數(shù)來銷毀嵌器。內(nèi)置類型或者復(fù)合類型 的成員的銷毀不需要任何操作
8.重載運(yùn)算符
- 一種函數(shù)
- 重定義了運(yùn)算符應(yīng)用于類類型對象時(shí)的含義
9.各種合成函數(shù)
- 合成賦值運(yùn)算符
- 編譯器為未顯示定義對應(yīng)的構(gòu)造函數(shù)的類創(chuàng)建的合成的拷貝賦值運(yùn)算符版本
- 除非定義為刪除的肛真,合成賦值運(yùn)算符會逐成員將右側(cè)運(yùn)算對象賦予左側(cè)運(yùn)算對象
- 合成拷貝構(gòu)造函數(shù)
- 除非定義為刪除的,合成拷貝構(gòu)造函數(shù)分別從給定對象拷貝成員來逐成員地初始化新對象
- 合成析構(gòu)函數(shù)
- 函數(shù)體為空
10.抽象基類
- 含有純虛函數(shù)的類爽航,無法創(chuàng)建抽象基類的對象
11.基類
- 可供其他類繼承的類蚓让。基類的成員也將成為派生類的成員
12.動(dòng)態(tài)綁定
- 使用動(dòng)態(tài)綁定讥珍,可以在一定程度上忽略相似類型的區(qū)別
- 直到運(yùn)行時(shí)才確定到底執(zhí)行函數(shù)的哪個(gè)版本
- 運(yùn)行時(shí)根據(jù)引用或者指針?biāo)壎▽ο蟮膶?shí)際類型來選擇執(zhí)行虛函數(shù)的某一個(gè)版本
13.動(dòng)態(tài)類型
- 對象在運(yùn)行時(shí)的類型
- 引用所引對象或者指針?biāo)笇ο蟮膭?dòng)態(tài)類型可能與該引用或指針的靜態(tài)類型不同
- 基類的指針或引用可以指向或者引用一個(gè)派生類對象历极。在這樣的情況下:
- 靜態(tài)類型是基類的引用或者指針
- 動(dòng)態(tài)類型是派生類的引用或指針
14.繼承
- 使用繼承,可以定義相似的類型衷佃,并對其相似關(guān)系建模
- 有一個(gè)已有的基類定義一個(gè)派生類的技術(shù)
- 派生類將繼承基類的成員
- 不同類型
- 私有繼承:基類的公有成員和受保護(hù)的成員是派生類的私有成員
- 公有繼承:基類的公有接口是派生類共有接口的組成部分
- 受保護(hù)的繼承:基類的公有成員和受保護(hù)成員是派生類的受保護(hù)成員
15.覆蓋
- 派生類中定義的虛函數(shù)如果與基類中定義的同名虛函數(shù)有相同的形參列表执解,則派生類版本將覆蓋基類的版本
16.多態(tài)
- 多態(tài)是指程序能通過引用或指針的動(dòng)態(tài)類型獲取類型特定行為的能力
- 純虛函數(shù)
- 在類的內(nèi)部聲明虛函數(shù)時(shí),在分號之前使用=0
- 一個(gè)純虛函數(shù)不需要被定義纲酗。
- 純虛函數(shù)表明該基類成員函數(shù)沒有實(shí)際意義衰腌,是作為一個(gè)抽象意義存在
18.重構(gòu)
- 通常情況下,重構(gòu)類的方式是將數(shù)據(jù)成員和函數(shù)成員移動(dòng)到繼承體系的高級別節(jié)點(diǎn)中觅赊,避免代碼冗余
19.虛函數(shù)
- 通過引用或指針對虛函數(shù)的調(diào)用直到運(yùn)行是才被解析
指針和引用的區(qū)別:
- 非空區(qū)別:指針可以不指向任何對象右蕊,而引用則必須指向一個(gè)對象
- 合法性區(qū)別:使用引用之前不需要測試合法性,而使用指針則需要考慮指針是否為空
- 可修改區(qū)別:可以修改指針指向哪個(gè)對象吮螺,但是引用指向的對象不能改變
- 應(yīng)用區(qū)別:
- 使用指針:
- 存在不指向任何對象的可能
- 需要能夠在不同時(shí)刻指向不同對象
- 使用引用:總是指向一個(gè)對象饶囚,不會改變指向時(shí)盡量使用引用。
- 使用指針:
野指針
- 指向一個(gè)已經(jīng)刪除的對象或者未申請鸠补,訪問受限內(nèi)存區(qū)域的指針
- 成因:
- 指針變量未初始化
- 指針釋放后未置空
- 指針操作超越變量的作用域
- 規(guī)避:
- 初始化時(shí)置為NULL
- 釋放時(shí)置為NULL
內(nèi)聯(lián)函數(shù)和宏
- 將函數(shù)指定為內(nèi)聯(lián)函數(shù)萝风,通常是將它在每個(gè)調(diào)用點(diǎn)上 內(nèi)聯(lián)地 展開→消除了函數(shù)在運(yùn)行時(shí)的開銷。
- 內(nèi)聯(lián)函數(shù)和普通函數(shù)相比可以加快程序運(yùn)行的速度紫岩,因?yàn)椴恍枰袛嗾{(diào)用规惰,在編譯的時(shí)候內(nèi)聯(lián)函數(shù)可以直接被鑲嵌到目標(biāo)代碼中。
- 宏只是一個(gè)簡單的替換泉蝌。
- 內(nèi)聯(lián)函數(shù)要做參數(shù)檢查而宏不需要歇万。
- 內(nèi)聯(lián)函數(shù)和宏相比沒有付出額外代價(jià)的情況下更安全。
- 內(nèi)聯(lián)函數(shù)一般只用于如下情況:一個(gè)函數(shù)被不斷重復(fù)調(diào)用勋陪;函數(shù)只有簡單的幾行且不包含for/while/switch語句贪磺。
- 類的構(gòu)造函數(shù)和析構(gòu)函數(shù)盡量在類外定義,因?yàn)轭悆?nèi)定義即為內(nèi)聯(lián)函數(shù)诅愚。
malloc/free和new/delete的區(qū)別
- 前者是標(biāo)準(zhǔn)庫函數(shù)寒锚,后者是運(yùn)算符,都可以用于申請動(dòng)態(tài)內(nèi)存和釋放內(nèi)存
- 對于非內(nèi)部數(shù)據(jù)類型的對象而言,前者只能分配內(nèi)存區(qū)域刹前,而無法執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)
this指針
- 本質(zhì)是一個(gè)函數(shù)參數(shù)泳赋, 指向調(diào)用當(dāng)前成員函數(shù)對象的常量指針
- 成員函數(shù)開始前構(gòu)造,成員函數(shù)結(jié)束后清除
- 不占用對象的空間
類的靜態(tài)成員
構(gòu)造函數(shù)腮郊、析構(gòu)函數(shù)摹蘑、拷貝構(gòu)造函數(shù)筹燕、拷貝賦值運(yùn)算符
虛函數(shù)
- 是否可以把每個(gè)函數(shù)都聲明為虛函數(shù)
- 不行轧飞,每個(gè)虛函數(shù)的對象都必須維護(hù)一個(gè)虛函數(shù)表,因此在使用虛函數(shù)時(shí)會產(chǎn)生額外的系統(tǒng)開銷撒踪。
- 虛函數(shù)表:一個(gè)類的虛函數(shù)的地址表
友元
- 不是類的成員函數(shù)但是可以訪問類的私有成員
- 需要在類內(nèi)聲明过咬,在類外定義
- 可以是函數(shù)也可以是一個(gè)類
重載、重寫
- 重寫(override)是一種面向?qū)ο蟮木幊讨仆J侵概缮愔貙懟惖奶摵瘮?shù)掸绞,重寫的函數(shù)必須有一致的參數(shù)表和返回值。
- 重載(overload)是一種語法規(guī)則耕捞,指編寫一個(gè)與已有函數(shù)同名但是參數(shù)表不同的函數(shù)衔掸。