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的外掛程式方式 主要是網上其他朋友的據介紹,還有那本由該軟體開發者所編寫的書,不過只看了一部分 自己寫了乙個功能有限 很簡單的框架 暫且...