C++面試知識(shí)點(diǎn)總結(jié)-創(chuàng)新互聯(lián)

面向?qū)ο缶幊趟枷耄∣OP)?

成都創(chuàng)新互聯(lián)公司成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元廣靈做網(wǎng)站,已為上家服務(wù),為廣靈各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

1、面向?qū)ο螅∣O)編程的基本原則:SOLID原則?

(1)單一職責(zé)原則;S:對(duì)象應(yīng)該僅具有一種單一功能;?

(2)開(kāi)放封閉原則;O:軟件體應(yīng)該是對(duì)于擴(kuò)展是開(kāi)放的,對(duì)于修改是封閉的;?

(3)Liskov里氏替換原則;L:程序中對(duì)象在不改變程序正確性的前提下,被它的子類所替換;?

(4)依賴倒置原則;I:高層次的模塊不應(yīng)該依賴于低層次的模塊;抽象接口不應(yīng)該依賴于具體實(shí)現(xiàn),兩者都應(yīng)該依賴于抽象接口;?

(5)接口隔離原則;D:依賴于抽象而不是一個(gè)實(shí)例;目的是系統(tǒng)解開(kāi)耦合,從而容易重構(gòu),更改和重新部署。?

2、面向?qū)ο笏拇蠡咎匦裕?

(1)抽象:提取現(xiàn)實(shí)世界中某事物的關(guān)鍵特性,為該事物構(gòu)建建模的過(guò)程。?

類與對(duì)象體現(xiàn)了C++抽象特性,即類是對(duì)象的抽象,對(duì)象是類的具體表現(xiàn)形式。?

(2)封裝:即隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外公開(kāi)接口,控制程序?qū)︻悓傩缘淖x取和修改。?

封裝有兩方面的含義:一是將有關(guān)的數(shù)據(jù)和操作代碼封裝在一個(gè)對(duì)象中,形成一個(gè)基本單位,各個(gè)對(duì)象之間相對(duì)獨(dú)立,互不干擾。二是將對(duì)象中某些部分對(duì)外隱蔽,即隱蔽其內(nèi)部細(xì)節(jié),只留下少量接口,以便于外界聯(lián)系,接收外界的消息。?

這種對(duì)外界隱蔽的做法稱為信息隱蔽。信息隱蔽還有利于數(shù)據(jù)安全,防止無(wú)關(guān)的人了解和修改數(shù)據(jù)。?

(3)繼承(重用):類的繼承與派生體現(xiàn)了C++的繼承特性。?

子類繼承父類的特性和行為。?

(4)多態(tài):類的虛函數(shù)體現(xiàn)了C++的多態(tài)性。?

多態(tài),即同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力。表現(xiàn)形式有覆蓋(重寫(xiě))和重載。?

多態(tài)性是指:由繼承而產(chǎn)生的不同的派生類,其對(duì)象對(duì)同一消息做出不同的響應(yīng)。?

3、重載與覆蓋的區(qū)別:?

(1)重載要求函數(shù)名相同,但是參數(shù)列表必須不同;?

覆蓋要求函數(shù)名、參數(shù)列表、返回值必須相同。?

(2)重載描述的是同一個(gè)類中不同成員函數(shù)直接的關(guān)系;?

覆蓋是子類和基類之間不同成員函數(shù)之間的關(guān)系。?

(3)重載的確定是在編譯時(shí)確定,是靜態(tài);?

虛函數(shù)則是在運(yùn)行時(shí)動(dòng)態(tài)確定。?

4、談一下虛函數(shù);?

(1)類的虛函數(shù)體現(xiàn)了C++的多態(tài)性;?

虛函數(shù)如何實(shí)現(xiàn)多態(tài):就是用父類的指針指向其子類的對(duì)象,父類指針根據(jù)賦給它的不同子類指針,動(dòng)態(tài)的調(diào)用子類的該函數(shù),而不是父類的函數(shù)。?

(2)何為多態(tài)性,多態(tài)性是指發(fā)出的消息被不同的對(duì)象接收時(shí)會(huì)產(chǎn)生完全不同的行為;(同一操作作用于不同的對(duì)象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果)?

(3)實(shí)現(xiàn)多態(tài)性的方式:?

a、重載:運(yùn)算符重載和函數(shù)重載;?

b、靜態(tài)關(guān)聯(lián)的優(yōu)缺點(diǎn):程序執(zhí)行效率高,但對(duì)程序員水平要求較高。??

c、覆蓋:虛函數(shù)和純虛函數(shù)。?

d、動(dòng)態(tài)關(guān)聯(lián)的優(yōu)缺點(diǎn):提供更好的編程靈活性、問(wèn)題抽象性和程序的易維護(hù)性,但是函數(shù)調(diào)用速度慢。?

(4)虛函數(shù)是怎么實(shí)現(xiàn)多態(tài)的:實(shí)現(xiàn)原理:虛函數(shù)表+虛表指針vptr;?

a、記住:通過(guò)對(duì)象調(diào)用虛函數(shù)不會(huì)出現(xiàn)多態(tài)(通過(guò)指針或者引用才會(huì)有多態(tài)性)?

b、編譯器處理:為每個(gè)類對(duì)象添加一個(gè)成員vptr,在內(nèi)存前面;?

c、虛表屬于類,不屬于對(duì)象;每個(gè)類使用一個(gè)虛函數(shù)表,每個(gè)類對(duì)象用一個(gè)虛表指針。?

d、空類,內(nèi)存為1,會(huì)有默認(rèn)的構(gòu)造和析構(gòu)函數(shù),?有虛函數(shù)的類,內(nèi)存為4(32),8(64);?

(5)虛析構(gòu)函數(shù),構(gòu)造函數(shù)不能聲明為虛函數(shù)。?

(6)純虛函數(shù)與抽象類:包含純虛函數(shù)的類稱為抽象類;?

純虛函數(shù)的作用是在基類中為派生類保留一個(gè)函數(shù)的名字,以便派生類根據(jù)需要對(duì)它進(jìn)行定義。?

(7)為什么引入抽象基類和純虛函數(shù):?

a、為了方便使用多態(tài)性?

b、在很多情況下,基類本身生成對(duì)象是不合理的。?

(8)虛函數(shù)與純虛函數(shù)的區(qū)別:?

a、虛函數(shù)是實(shí)現(xiàn)的,哪怕是空實(shí)現(xiàn);純虛函數(shù)只是一個(gè)接口,是函數(shù)聲明,需要子類去實(shí)現(xiàn)

b、虛函數(shù)在子類中也可以不修改,但純虛函數(shù)必須在子類中實(shí)現(xiàn)?

c、虛函數(shù)的類用于“實(shí)作繼承”,也就是說(shuō)繼承接口的同時(shí)也繼承了父類的實(shí)現(xiàn),當(dāng)然也可以完成自己的實(shí)現(xiàn);純虛函數(shù)的類用于“介面繼承”,即純虛函數(shù)關(guān)注的是接口統(tǒng)一性,現(xiàn)由子類完成。?

d、帶純虛函數(shù)的類叫虛基類(抽象類),這種類不能直接實(shí)例化對(duì)象,只有被繼承,并實(shí)現(xiàn)其純虛函數(shù)后,才能使用。?

5、(1)為什么析構(gòu)函數(shù)是虛函數(shù)??

我們知道刪除指針對(duì)象是沒(méi)有問(wèn)題的,指針對(duì)象的析構(gòu)函數(shù)會(huì)正確調(diào)用,但僅限于指針的類型所表示的對(duì)象大小。?

如果以一個(gè)基類指針指向其派生類,刪除這個(gè)基類指針只能刪除基類對(duì)象部分,而不能刪除整個(gè)派生類對(duì)象,原因是通過(guò)基類指針無(wú)法訪問(wèn)派生類的析構(gòu)函數(shù)。?

(2)而構(gòu)造函數(shù)不能為虛函數(shù)??

原因是構(gòu)造自己時(shí),對(duì)象還不存在。虛函數(shù)需要有虛函數(shù)表,但這個(gè)表因?yàn)樵跇?gòu)造階段是不存在的,至少還沒(méi)分配內(nèi)存,無(wú)法實(shí)現(xiàn)定義要求。

6、四種強(qiáng)制轉(zhuǎn)換:?

(1)static_cast:靜態(tài)轉(zhuǎn)換,基本數(shù)據(jù)類型間、有類型指針與void*,基類和派生類、指針與引用;?

(2)dynamic_cast:動(dòng)態(tài)轉(zhuǎn)換,專門(mén)用于將多態(tài)基類的指針貨引用強(qiáng)制轉(zhuǎn)換為派生類的指針或引用;運(yùn)行時(shí)類型檢查,不安全會(huì)返回null。下行轉(zhuǎn)換,是安全的;?

(3)const_cast:常量轉(zhuǎn)換,僅用于進(jìn)行去除?const?屬性的轉(zhuǎn)換;不能在不同的種類間轉(zhuǎn)換。?

里面的類型,必須是指針、引用或者指向?qū)ο箢愋统蓡T的指針,不能是對(duì)象或者基本類型。?

(4)reinterpret_cast:強(qiáng)轉(zhuǎn),不安全也不建議。 \

7、C++11新特性?

(1)lambda:[捕獲列表](參數(shù)列表)mutable修飾符->返回類型{函數(shù)體}?

(2)左右值引用:?

?a、左值引用&:對(duì)左值進(jìn)行引用的類型,=右邊的值必須可以取地址;int &b = a;?

b、右值引用&&:=右邊需要時(shí)右值,可以用std::move強(qiáng)制把左值轉(zhuǎn)換為右值;int &&b = 5;? 或者?int &&b = std::move(a);?

(3)移動(dòng)語(yǔ)義:std::move,轉(zhuǎn)移資源所有權(quán),轉(zhuǎn)為自己所有,別人不再使用。深淺拷貝,直接把原來(lái)需要拷貝的內(nèi)存易主。?

(4)完美轉(zhuǎn)發(fā):std::forward,可以寫(xiě)一個(gè)接受任意實(shí)參的函數(shù)模板,并轉(zhuǎn)發(fā)到其他函數(shù),目標(biāo)函數(shù)也會(huì)收到與轉(zhuǎn)發(fā)函數(shù)完全相同的實(shí)參;即是:轉(zhuǎn)發(fā)函數(shù)實(shí)參是左值,那目標(biāo)函數(shù)實(shí)參也是左值(右值同理)。?

(5)std::function:實(shí)現(xiàn)函數(shù)回調(diào);?

(6)std::bind:將可調(diào)用的對(duì)象和參數(shù)一起綁定,綁定的結(jié)果使用std::function進(jìn)行保存,并延遲調(diào)用到任何我們需要的時(shí)候.?

(7)auto:通過(guò)=右邊的類型推導(dǎo)出變量的類型;?

decltype:用于推導(dǎo)表達(dá)式類型;?

(8)智能指針:?

a、shared_ptr:多個(gè)shared_ptr智能指針可以共同使用同一塊內(nèi)存。(計(jì)數(shù)機(jī)制,add+1,sub-1,引用計(jì)數(shù)為0,堆內(nèi)存自動(dòng)釋放);?

可解決資源忘記釋放內(nèi)存泄露問(wèn)題,及懸空指針問(wèn)題。?

b、unique_ptr:對(duì)象對(duì)其有唯一所有權(quán).同一個(gè)時(shí)間只能有一個(gè)智能指針可以指向該對(duì)象。?

? c、weak_ptr:弱引用,配合shared_ptr使用,指向shared_ptr所管理的對(duì)象,但是不會(huì)增加引用計(jì)數(shù),用于避免循環(huán)引用。?

但是解決相互引用的同時(shí),引用數(shù)永遠(yuǎn)不會(huì)為0,所以才用弱引用,不會(huì)增加引用計(jì)數(shù)。?

8、C++14新特性:在C++11基礎(chǔ)上做了小改動(dòng)?

(1)定義變量模板:?

(2)lambda表達(dá)式的改動(dòng):auto?func?=?[x?=?3](auto?y) {return?x?+?y;?};?

a、支持lambda泛型參數(shù):?

b、支持初始化捕獲:?

(3)constexpr限制放寬:?

9、C++17新特性:?

(1)對(duì)auto表達(dá)式推導(dǎo)的規(guī)則進(jìn)行了改變:?

(2)lambda表達(dá)式可以捕獲”*this“,之前捕獲this是只讀的引用,x在捕獲當(dāng)前對(duì)象的拷貝。?

(3)inline變量;?

(4)namespace嵌套;?

10、指針和引用:?

(1)定義和性質(zhì)不同:?

指針式一個(gè)變量,存儲(chǔ)的是一個(gè)地址,指向內(nèi)存的一個(gè)存儲(chǔ)單元;?

引用是原變量的一個(gè)別名,和原變量實(shí)質(zhì)上是同一個(gè)東西。?

(2)指針可以 有多級(jí),引用只能是一級(jí);?

(3)指針可以在定義時(shí)候不初始化,引用必須在定義時(shí)候初始化;?

(4)指針可以指向NULL,引用卻不可以;?

(5)指針初始化后可以再改變,引用卻不可以;?

(6)sizeof的運(yùn)算結(jié)果不同;?

(7)自增運(yùn)算意義不同:?

指針:指針指向當(dāng)前指向內(nèi)存的后面的內(nèi)存;?

引用:相當(dāng)于引用原變量的自增;?

(8)指針和引用作為函數(shù)參數(shù)時(shí),指針需要檢查是否為空,引用不需要;?

(9)指針和引用都可以作為函數(shù)參數(shù),改變實(shí)參的值。?

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

本文名稱:C++面試知識(shí)點(diǎn)總結(jié)-創(chuàng)新互聯(lián)
文章URL:http://bm7419.com/article36/hedpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)外貿(mào)建站、關(guān)鍵詞優(yōu)化做網(wǎng)站、網(wǎng)站維護(hù)動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)