類的定義式:類的定義,可以知道類的大小
類的實現:
類的宣告:類的宣告,表明,使用此類,編譯不會出錯
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 並沒有把...