C++編譯的過程哑舒?
預(yù)處理->編譯->匯編->鏈接锅知。
- 預(yù)處理:
預(yù)處理相當(dāng)于根據(jù)預(yù)處理指令組裝新的C/C++程序播急。經(jīng)過預(yù)處理,會(huì)產(chǎn)生一個(gè)沒有宏定義售睹,沒有條件編譯指令桩警,沒有特殊符號(hào)的輸出文件,這個(gè)文件的含義同原本的文件無異昌妹,只是內(nèi)容上有所不同捶枢。 - 編譯:
將預(yù)處理完的文件進(jìn)行一系列詞法分析握截、語法分析、語義分析及優(yōu)化后柱蟀,產(chǎn)生相應(yīng)的匯編代碼文件川蒙。 - 匯編:
將編譯完的匯編代碼文件翻譯成機(jī)器指令,并生成可重定位目標(biāo)程序的.o文件长已,該文件為二進(jìn)制文件畜眨,字節(jié)編碼是機(jī)器指令。 - 鏈接:
通過鏈接器將一個(gè)個(gè)目標(biāo)文件(或許還會(huì)有庫文件)鏈接在一起生成一個(gè)完整的可執(zhí)行程序术瓮。
C++ 編譯過程簡(jiǎn)介
靜態(tài)鏈接和動(dòng)態(tài)鏈接的區(qū)別康聂?
在鏈接過程中,靜態(tài)鏈接和動(dòng)態(tài)鏈接就出現(xiàn)了區(qū)別胞四。靜態(tài)鏈接的過程就已經(jīng)把要鏈接的內(nèi)容已經(jīng)鏈接到了生成的可執(zhí)行文件中恬汁,就算你再去把靜態(tài)庫刪除也不會(huì)影響可執(zhí)行程序的執(zhí)行;而動(dòng)態(tài)鏈接這個(gè)過程卻沒有把內(nèi)容鏈接進(jìn)去辜伟,而是在執(zhí)行過程中氓侧,再去找要鏈接的內(nèi)容,生成可執(zhí)行文件中并沒有要鏈接的內(nèi)容导狡,所以當(dāng)你刪除動(dòng)態(tài)庫時(shí)约巷,可執(zhí)行程序就不能運(yùn)行。
動(dòng)態(tài)鏈接生成的可執(zhí)行文件要比靜態(tài)鏈接生成的文件要小一些旱捧。
多態(tài)独郎?
可以簡(jiǎn)單地概括為“一個(gè)接口,多種方法”枚赡。
多態(tài)的作用氓癌?
- 隱藏實(shí)現(xiàn)細(xì)節(jié),使得代碼能夠模塊化贫橙;擴(kuò)展代碼模塊贪婉,實(shí)現(xiàn)代碼重用;
- 接口重用:為了類在繼承和派生的時(shí)候卢肃,保證使用家族中任一類的實(shí)例的某一屬性時(shí)的正確調(diào)用谓松。
靜態(tài)多態(tài)和動(dòng)態(tài)多態(tài)?
靜態(tài)多態(tài):函數(shù)重載和運(yùn)算符重載屬于靜態(tài)多態(tài)践剂,復(fù)用函數(shù)名鬼譬;
動(dòng)態(tài)多態(tài):派生類和虛函數(shù)實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)。
區(qū)別:
- 靜態(tài)多態(tài)的函數(shù)地址早綁定逊脯,在編譯階段確定函數(shù)地址优质;
- 動(dòng)態(tài)多態(tài)的函數(shù)地址晚綁定,運(yùn)行階段確定函數(shù)地址。
動(dòng)態(tài)多態(tài)滿足條件: - 有繼承關(guān)系巩螃;
- 子類重寫父類的虛函數(shù)演怎。
C++---靜態(tài)多態(tài)與動(dòng)態(tài)多態(tài)