-
C++語言中的`const`關鍵字有什么作用?為什么要使用`const`關鍵字?
1 const修飾的變量將會被放到常量區,避免被意外的改動。
const修飾的常量比#define修飾的有更多的優勢,比如可以調試,類型檢查等
2 const修飾的參數可做輸入型參數
對于const指針類型,可以避免修改,而如果是const引用類型可以省去臨時對象的構造和析構過程,提高效率
3 const修飾返回值
如果你不希望返回值被修改,可以用const修飾返回值
4 const修飾成員函數
對于類中不會修改成員變量的成員函數,可以聲明為const成員函數
2. C++語言中的類有什么作用?
類體現了C++面向對象的特點。
類的基本思想在于抽象和封裝。
數據抽象是一種依賴于接口和實現分離的技術。類的實現包括類的數據成員,負責接口實現的函數體以及定義類所需的各種私有函數。
數據抽象之和我們就可以就行復用。進而實現繼承、多態
而封裝則是實現了類的接口和實現的分離,隱藏實現細節。
我可以舉個操作系統的例子:
操作系統對下管理軟硬件資源,而對上為用戶、程序員提供良好的服務。而對下管理硬件的時候,看似不同的硬件實際上都有讀寫文件的方法。結合Linux系統一切皆文件的思想下,我們只需實現出struct file類,再實現多態,就能封裝成不同的硬件了。在struct file這一層,所有外設就沒有硬件的差別了。
3. C++語言中類的繼承有什么作用?在什么場景下應該使用類的繼承?
繼承允許我們以基類的方式來實現派生類。
繼承的使用一般會和組合一起討論。組合是一種復用關系。組合之間的依賴關系不強,耦合度低;而繼承是一種耦合度高的方案,繼承一定程度上破壞了封裝。
我們推薦多使用組合,但是當多種子類擁有共同的特征時,我們還是
可以使用繼承,而且,如果要實現多態,必須使用繼承
4. 全局變量的定義是否可以放在.h文件里?
全局變量的定義不能放到頭文件里,如果頭文件被多個.c/.cpp文件包含,就會生成多份,最后導致多重定義的錯誤
5. 什么是編譯?什么是鏈接?
在ANSIC中我們的程序會經歷會通過翻譯環境、運行環境兩種
其中翻譯環境就有兩個步驟:編譯、鏈接
編譯階段分又為三個階段:預處理,編譯,匯編
預處理主要做4個事:去注釋,宏替換,頭文件展開,條件編譯。然后我們的 .c/.cpp文件會變成 .i文件
編譯會進行語法分析、詞法分析、語義匯總、符號匯總等。我們的代碼就轉成了匯編代碼,然后我們的 .i文件會變成 .s文件
匯編階段會將上一步的匯編代碼轉成二進制代碼。并生成符號表。然后我們的 .s文件會變成格式為elf的 .o文件
鏈接階段主要進行合并段表和符號表的合并和重定位
.o文件是elf格式的,會分為很多段,合并段表就是把相同的段合并到一起
6. 你最近在讀哪些(技術有關)書?或你最近在研究哪些和技術有關的內容?
我最近在看兩本書,一本是《Effective C++》,這本書為C++程序員提供了一系列實用的建議和技巧,幫助他們在編寫高效、健壯和易于維護的代碼時避免常見的陷阱和錯誤;
另一本是《STL源碼剖析》,侯捷老師的講解生動、細致、全面,對我理解STL的底層非常有幫助。
注意:
- ?允許合理使用搜索引擎,允許查閱書籍與網絡上的公開資料。
- ?題目內容要求獨立完成,不允許由他人代答,不允許使用AI生成回答。
- ?本題目限時1小時。
(掛了竟然,沒想到)