2016-07-04 27 views
2

首先要做的事情是:我知道我的問題很可能是基於一般的誤解,但我希望我可以向你明確我的觀點。我知道在C++中將代碼放入不同文件時,我們已經創建了一個.h(用於定義)和一個.cpp(用於實現)。 在編寫一個類庫時,例如我必須在頭文件中定義私有和公共成員的定義。但是如果 - 出於某種原因 - 我想隱藏用戶的私人信息,該怎麼辦?防止圖書館內部的東西在卑鄙中可見.h

謝謝!

回答

5

您使用Pimpl成語。 Pimpl代表「實現指針」。基本上,你不會將實現細節存儲在類中。相反,你一個不透明的指針實現存儲爲這樣:

class MyClass 
{ 
public: 
    //public functions here 
private: 
    class Impl; //no definition, opaque 
    Impl* pimpl; 
}; 

然後你去定義你MyClass::Impl類只有.cpp文件,因爲只有該函數的定義需要它。

PIMPL語言具有額外的好處,只要該類的接口不會改變,對實現所做的任何更改都不需要重新編譯類客戶端。

4

你不能。這是C++的缺點之一:標記爲private的東西是仍然是類聲明的一部分,所以會出現在標題中。

如果你真的隱藏功能,然後使用平普爾成語可以提供幫助。就個人而言,我寧願忍受這個缺點,因爲使用這個成語可能會導致其他問題,比如你的課程不再可以被複制。

Why should the "PIMPL" idiom be used?