c 將檔案之間編譯關係降到最低

2022-05-01 02:45:06 字數 1154 閱讀 2197

類的定義式:類的定義,可以知道類的大小

類的實現:

類的宣告:類的宣告,表明,使用此類,編譯不會出錯

c++並沒有把「將介面從實現中分離」做得很好。class的定義式不只詳細敘述了class介面,還包括十足的實現序幕。如:

class person

public:

person(const string& name,const dateg& birthday,const address& addr);

string name() const;

string birthdate() const;

string address() const;

private:

string thename;

date  thebirthdate;

address theaddress; 

這裡的person無法通過編譯,因為編譯器沒看到string,date和address的定義式。這樣的定義式通常由#include指示符提供,所以person定義檔案的最上方很可能存在這樣的東西:

#include  

#include 「date.h」

#include 「address.h」

但是,這麼一來便是在person定義檔案和其含入檔案之間形成了一種編譯依存關係。如果這些標頭檔案中的乙個被改變,或這些標頭檔案所依賴的其他標頭檔案有任何改變,那麼每乙個含入person class的檔案就得重新編譯,任何使用person class的檔案也必須重新編譯。這通常會對大專案造成災難。

解決方法:

考慮加上前置宣告,以去掉#include包含的標頭檔案:

class date;//前置宣告 

class address;//前置宣告 

class person;

通過此方法,可以消除耦合,class person與class date等沒有依賴關係,person的客戶就只有在person介面被修改時才重新編譯。

但是這個方法有個問題:

int main()

當編譯器看到x的定義式,它知道必須分配多少記憶體才能夠容下乙個int。但當編議器看到p的定義式,如何知道乙個person有多大?唯一的辦法就是詢問class的定義式,然而如果class定義式不列出實現的細節(不知道到class date等的實現細節)

C 將檔案間的編譯依存關係降到最低

20180320 c 將檔案間的編譯依存關係降到最低 當對c 程式的某個class實現檔案做了些微修改,再重新建置這個檔案,會花費很長時間,因為c 沒有把 將介面從實現中分離 這事做的很好。class的定義式不只詳細敘述了class介面,還包括十足的實現細節,eg class person 這裡的c...

將檔案之間的編譯依賴關係降至最低

考慮這樣幾個類,a a1 a2 b,其中a和b是要暴露給使用者的類。1.最初組織關係如下 a1.h include class a1 a.cpp include a.h void a dosomething b a returnb user.cpp include a.h int main 因此,u...

條款31 將檔案間的編譯依存關係降至最低

條款31 將檔案間的編譯依存關係降至最低 minimize compilation dependencies between files.內容 在你們的開發團隊中,一些有經驗的工程師時不時地會教導新手一些基本的程式設計原則,其中 將介面從實現中 分離 可能是他 她 要你必須牢記原則,因為c 並沒有把...