C/C++基礎(chǔ)知識--面試總結(jié)

C++編譯的過程?

預(yù)處理->編譯->匯編->鏈接。

  1. 預(yù)處理:
    預(yù)處理相當(dāng)于根據(jù)預(yù)處理指令組裝新的C/C++程序。經(jīng)過預(yù)處理,會產(chǎn)生一個沒有宏定義,沒有條件編譯指令,沒有特殊符號的輸出文件,這個文件的含義同原本的文件無異,只是內(nèi)容上有所不同。
  2. 編譯:
    將預(yù)處理完的文件進(jìn)行一系列詞法分析、語法分析、語義分析及優(yōu)化后,產(chǎn)生相應(yīng)的匯編代碼文件。
  3. 匯編:
    將編譯完的匯編代碼文件翻譯成機(jī)器指令,并生成可重定位目標(biāo)程序的.o文件,該文件為二進(jìn)制文件,字節(jié)編碼是機(jī)器指令。
  4. 鏈接:
    通過鏈接器將一個個目標(biāo)文件(或許還會有庫文件)鏈接在一起生成一個完整的可執(zhí)行程序。
    C++ 編譯過程簡介

靜態(tài)鏈接和動態(tài)鏈接的區(qū)別?

在鏈接過程中,靜態(tài)鏈接和動態(tài)鏈接就出現(xiàn)了區(qū)別。靜態(tài)鏈接的過程就已經(jīng)把要鏈接的內(nèi)容已經(jīng)鏈接到了生成的可執(zhí)行文件中,就算你再去把靜態(tài)庫刪除也不會影響可執(zhí)行程序的執(zhí)行;而動態(tài)鏈接這個過程卻沒有把內(nèi)容鏈接進(jìn)去,而是在執(zhí)行過程中,再去找要鏈接的內(nèi)容,生成可執(zhí)行文件中并沒有要鏈接的內(nèi)容,所以當(dāng)你刪除動態(tài)庫時(shí),可執(zhí)行程序就不能運(yùn)行。
動態(tài)鏈接生成的可執(zhí)行文件要比靜態(tài)鏈接生成的文件要小一些。

多態(tài)?

可以簡單地概括為“一個接口,多種方法”。

多態(tài)的作用?

  1. 隱藏實(shí)現(xiàn)細(xì)節(jié),使得代碼能夠模塊化;擴(kuò)展代碼模塊,實(shí)現(xiàn)代碼重用;
  2. 接口重用:為了類在繼承和派生的時(shí)候,保證使用家族中任一類的實(shí)例的某一屬性時(shí)的正確調(diào)用。

靜態(tài)多態(tài)和動態(tài)多態(tài)?

靜態(tài)多態(tài):函數(shù)重載和運(yùn)算符重載屬于靜態(tài)多態(tài),復(fù)用函數(shù)名;
動態(tài)多態(tài):派生類和虛函數(shù)實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)。
區(qū)別:

  1. 靜態(tài)多態(tài)的函數(shù)地址早綁定,在編譯階段確定函數(shù)地址;
  2. 動態(tài)多態(tài)的函數(shù)地址晚綁定,運(yùn)行階段確定函數(shù)地址。
    動態(tài)多態(tài)滿足條件:
  3. 有繼承關(guān)系;
  4. 子類重寫父類的虛函數(shù)。
    C++---靜態(tài)多態(tài)與動態(tài)多態(tài)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容