1. 程式人生 > >增加類的封裝性

增加類的封裝性

clas 我們 操作 mes 擁有 bookmark web 另一個 編譯

封裝性:越少的代碼可以看到數據(也就是可以訪問它們),越多東西被封裝,越少人可以看到它。而越少的人看到它,我們就有愈大的彈性去改變他,因為我們的改變僅僅直接影響看到改變的那些人。例如,class WebBrowser可能擁有大量便利函數,某些與bookmarks書簽有關,有些與cookie有關,通常大多數客戶只對其中某些感興趣。沒道理讓這些客戶對所有內容都感知或者說可以操作。比如,一個與cookie相關的便利函數發生編譯關系,分離它們的最直接做法就是將書簽相關的便利函數聲明在同一個頭文件,將cookie相關便利函數聲明於另一個頭文件,以此類推:

//頭文件"webbrowser.h"--放類自身
namespace WebBrowserStuff {
    class WebBrowser {...};
    ...     //核心機能,non-member函數
}

//頭文件"webbrowserzbookmarks.h"
namespace WebBrowserStuff {
    ... //與bookmarks相關的便利函數
}

//頭文件"webbrowsercookies.h"
namespace WebBrowserStuff {
    ... //與cookie相關的便利函數
}

 這是C++標準庫的組織方式。標準庫不是一個擁有單一的整體的龐大的頭文件並在其中包含每一樣東西,而是有數十個頭文件(<vector>,<memory,<algorithm>),每個頭文件std的某些機能。如果客戶只想要list,那就#include<list>。

將所有便利函數放在多個頭文件內但隸屬同一命名空間,意味著客戶可以輕松擴展這一組便利函數。

註意

寧拿non-member non-friend函數替換member函數。這樣做可以增加封裝性、包裹彈性和機能擴充性。

增加類的封裝性