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