2011-04-10 61 views
8

我注意到我能夠在g ++的父類之前編譯一個子類。是否需要按照特定的順序進行編譯,並考慮到依賴關係?g ++編譯順序很重要嗎?

+3

簡短回答:否 – abeln 2011-04-10 23:38:20

回答

11

鏈接順序可以事情;編輯順序不。

3

總之:不!

每個C++編譯單元(C++源文件)都是獨立編譯的。類繼承等是在運行時設置的。這就是爲什麼您可以在單獨維護的庫中擁有基類,只要API和ABI保持兼容,就可以在不強制後代類進行重新編譯的情況下對基類進行更新。

0

爲了擴大ildjarn的答案,編譯子類的實現只需要父類的API /合同,而不是其實現。這將生活在一個像Parent.h這樣的文件中,該文件將包含在包含孩子實施的文件中。

0

一般來說,沒有。編譯器將創建代表任何它無法識別但可以安全忽略的符號,鏈接將把這些符號轉換爲正確的代碼。在你的情況下,頭文件告訴編譯器編譯你的子類需要知道的一切,所以具體可以等待。

0

...我能一個父類之前編譯一個子類...

「編譯」是不是一個嚴格的定義來看,所以它是不完全清楚你的意思在這裏。但總的來說,不,你不能在父類之前編譯子類。在C++中,父類型必須爲完整,然後才能將其用作任何其他子類類型的基類。你要麼誤解了某些東西,要麼賦予「編譯」這個術語一些非正統的含義。

+2

我在做OP時主要問你是否可以在做'g ++ -c Child.cpp'之前做'g ++ -c Parent.cpp'之類的事情, – QuantumMechanic 2011-04-11 00:15:28