物聯(lián)網(wǎng)嵌入式學(xué)習(xí)的內(nèi)容繁雜,很多小伙伴在準(zhǔn)備物聯(lián)網(wǎng)面試的時(shí)候,面對(duì)眾多知識(shí)點(diǎn)無(wú)從下手。小千在此為大家整理了物聯(lián)網(wǎng)面試題集錦—C++語(yǔ)言篇,希望能夠幫助大家順利通關(guān)!
1、談?wù)勆督袑?duì)象成員以及對(duì)象成員的構(gòu)造函數(shù)調(diào)用方式
在類中定義的數(shù)據(jù)成員?般都是基本的數(shù)據(jù)類型。但是類中的成員也可以是對(duì)象,叫做對(duì)象成員。
C++中對(duì)對(duì)象的初始化是非常重要的操作,當(dāng)創(chuàng)建?個(gè)對(duì)象的時(shí)候,c++編譯器必須確保調(diào)?了所有子對(duì)象的構(gòu)造函數(shù)。如果所有的子對(duì)象有默認(rèn)構(gòu)造函數(shù),編譯器可以自動(dòng)調(diào)用他們。但是如果子對(duì)象沒(méi)有默認(rèn)的構(gòu)造函數(shù),或者想指定調(diào)用某個(gè)構(gòu)造函數(shù)怎么辦?
那么是否可以在類的構(gòu)造函數(shù)直接調(diào)用子類的屬性完成初始化呢?但是如果子類的成員屬性是私有的,我們是沒(méi)有辦法訪問(wèn)并完成初始化的。
解決辦法非常簡(jiǎn)單:對(duì)于?類調(diào)用構(gòu)造函數(shù),c++為此提供了專門的語(yǔ)法,即構(gòu)造函數(shù)初始化列表。 當(dāng)調(diào)用構(gòu)造函數(shù)時(shí),?先按各對(duì)象成員在類定義中的順序(和參數(shù)列表的順序無(wú)關(guān))依次調(diào)用它們的構(gòu)造函數(shù),對(duì)這些對(duì)象初始化,最后再調(diào)用本身的函數(shù)體。也就是說(shuō),先調(diào)用對(duì)象成員的構(gòu)造函數(shù),再調(diào)用本身的構(gòu)造函數(shù)。 析構(gòu)函數(shù)和構(gòu)造函數(shù)調(diào)用順序相反,先構(gòu)造,后析構(gòu)。
2、談?wù)勀銓?duì)explicit的理解
c++提供了關(guān)鍵字explicit,禁止通過(guò)構(gòu)造函數(shù)進(jìn)行的隱式轉(zhuǎn)換。聲明為explicit的構(gòu)造函數(shù)不能在隱式轉(zhuǎn)換中使用;
(1)C++中只帶有一個(gè)參數(shù)的構(gòu)造函數(shù),或者或者除了第一個(gè)參數(shù)外其余參數(shù)都有缺省值的多參構(gòu)造函數(shù),承擔(dān)了兩個(gè)角色;
1.用于構(gòu)建單參數(shù)的類對(duì)象
2.隱含的類型轉(zhuǎn)換操作符
例如:一個(gè)類A的構(gòu)造函數(shù)A(int i)就是,既可以用來(lái)作為構(gòu)造器,又可以實(shí)現(xiàn)隱式轉(zhuǎn)換A a=1;因?yàn)?可以通過(guò)構(gòu)造函數(shù)A(int i)轉(zhuǎn)換為一個(gè)類A的對(duì)象。(隱含的類型轉(zhuǎn)換操作符)
(2)explicit關(guān)鍵字只對(duì)有一個(gè)參數(shù)的類構(gòu)造函數(shù)有效, 如果類構(gòu)造函數(shù)參數(shù)大于或等于兩個(gè)時(shí), 是不會(huì)產(chǎn)生隱式轉(zhuǎn)換的, 所以explicit關(guān)鍵字也就無(wú)效了。
(3)聲明為explicit的構(gòu)造函數(shù)不能在隱式轉(zhuǎn)換中使用,只能顯示調(diào)用,去構(gòu)造一個(gè)類對(duì)象。
(4)盡量避免有二義性的類型轉(zhuǎn)換,如果類中包含一個(gè)或多個(gè)隱式類型轉(zhuǎn)換,則必需使用explicit關(guān)鍵字確保在類類型和目標(biāo)類型之間只存在唯一一種隱式轉(zhuǎn)換方式,否則將出現(xiàn)二義性。
(5)但是將拷貝構(gòu)造函數(shù)聲明成explicit并不是良好的設(shè)計(jì),一般只將有單個(gè)參數(shù)的constructor聲明為explicit,而copy constructor不要聲明為explicit。
更多關(guān)于物聯(lián)網(wǎng)培訓(xùn)的問(wèn)題,歡迎咨詢千鋒教育在線名師,如果想要了解我們的師資、課程、項(xiàng)目實(shí)操的話可以點(diǎn)擊咨詢課程顧問(wèn),獲取試聽(tīng)資格來(lái)試聽(tīng)我們的課程,在線零距離接觸千鋒教育大咖名師,讓你輕松從入門到精通。