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