C 介面和物件分離的技術

2021-04-24 03:23:54 字數 2324 閱讀 1900

c++ 介面和物件分離的技術

這是effective c++ item 31的內容.

先看一下這個類

class person ;

為了通過編譯在這裡在定義 person 類的檔案中,必須包含:

#include

#include "date.h"

#include "address.h"

不幸的是,這樣就建立了person標頭檔案和這些標頭檔案之間的編譯依賴關係。

顯然,所有person類的客戶都依賴上面三個標頭檔案.這可不是啥麼好玩的事情.

一旦這些標頭檔案所依賴的檔案發生了變化,所有使用person 類標頭檔案的檔案一樣必須重新編譯!!!!!

好在effective c++給出兩種解決的方法,個人傾向於第二種(這也是jacobson的minimal/enxtension 理論推薦的),

雖然會犧牲一些執行時間和記憶體,但**結構會很清晰也有利於擴充套件,這是後話.

1.handle 方法

person.h

#include

#include

class personimpl;                     

class date;                           

class address;                        

class person ;                                        

person.cpp

#include "person.h"         

#include "personimpl.h"     

person::person(const std::string& name, const date& birthday,

const address& addr)

: pimpl(new personimpl(name, birthday, addr))

std::string person::name() const

date person::birthdate() const

address person::address() const

personimpl.h

#include

#include "date.h"

#include "address.h"

class personimpl ;

personimpl.cpp

#include "personimpl.h"

personimpl::personimpl(const std::string& name, const date& birthday,

const address& addr)

:thename(name),

thebirthdate(birthday),

theaddress(addr)

std::string personimpl::name() const

date personimpl::birthdate() const

address personimpl::address() const

2.abstrat inte***ce 方法

乙個 person 的 inte***ce 類可能就像這樣

class person ;

這個類的客戶必須針對 person 的指標或引用程式設計,因為例項化包含純虛函式的類是不可能的。

乙個 inte***ce 類的客戶必須有辦法建立新的物件。

他們一般通過呼叫乙個為「可以真正例項化的派生類」扮演建構函式的角色的函式做到這一點的。

class person ;

realperson.h

class realperson: public person

virtual ~realperson() {}

std::string name() const;        // implementations of these

date birthdate() const;   // functions are not shown, but

address address() const;     // they are easy to imagine

private:

std::string thename;

date thebirthdate;

address theaddress;

};

C 介面和物件分離的技術

c 介面和物件分離的技術 這是effective c item 31的內容.先看一下這個類 class person 為了通過編譯在這裡在定義 person 類的檔案中,必須包含 include include date.h include address.h 不幸的是,這樣就建立了person標頭...

c 介面與實現的分離

由於c 沒有明確的將介面和實現分離,檔案之間的編譯依賴關係很大,如果有乙個檔案 發生變化,則可能影響其他檔案,乃至整個專案。因此,將物件實現細目隱藏於乙個指標背後的目的,我們可以設計乙個介面類。乙個實現類,負責介面的實現。如下 class personimpl class date class ad...

C 實現介面與功能的分離 Ribbon介面

以前寫程式,在mainwindow裡面到處都是選單 按鈕 工具欄的事件,這個文件的內容特別長,找乙個功能對應的 太多,很不方便,最近看了一些sharpdevelop的外掛程式方式 主要是網上其他朋友的據介紹,還有那本由該軟體開發者所編寫的書,不過只看了一部分 自己寫了乙個功能有限 很簡單的框架 暫且...