簡體   English   中英

C ++訪問說明符,太少了?

[英]C++ access specifiers, too few?

據我所知,C ++中只有3個訪問說明符: privatepublicprotected

使用這3個訪問說明符,我如何使方法用於項目中的類不可用於“外國人”(例如C#中的內部公共

C ++不知道什么是項目。

C ++了解類,在其中提供了您提到的三個訪問說明符。

C ++知道翻譯單元,它提供兩個訪問說明符:內部和外部鏈接。

編輯:關於內部和外部鏈接,這與是否在翻譯單元(目標文件)之外看到符號有關。 TU中定義的任何全局staticconst變量都具有內部鏈接。 其他人有外部聯系。

簡單地說,你沒有。 C ++不同於C#。

如果您不想使類在給定的庫或可執行文件之外可用,則只需不將頭文件提供給項目的用戶。

您可以使用密碼鍵朋友慣用語

不過,這不是您可以搜索的術語。 這個想法並不新奇,盡管並不十分普遍,但這種想法在SO上出現了。 上面的鏈接是我對通用解決方案的嘗試(在C ++ 03中不可能干凈地完成,而在C ++ 0x中很漂亮)。

我確定還有其他方法可以嘗試執行此操作,但是由於某種原因,我在上面有附件... :)


但是否則, 不會 一個更常見,更簡單的解決方案是將您的內容放到一個detail名稱空間中(例如,在整個Boost中是常見的),然后說“不要去那里”。

您必須要解決的兩件事是

  1. 有一個在您的代碼中使用的內部名稱空間,您並未真正對其進行宣傳。 然后,庫的用戶使用您打算用於公共消費的任何命名空間。 但是,它不是強制性的。 只是因為他們不一定了解名稱空間或被告知不要使用它,所以他們就不知道了。

  2. 使用朋友。 由編譯器強制執行的。 如果一個類是另一個類的朋友,或者一個函數是一個類的朋友,則它可以訪問其私有成員函數,而其他人則不能。 不幸的是,這意味着該朋友可以訪問所有私有成員,因此它可以提供比您想要的更多的訪問各種類或函數的權限(盡管它將在您自己的類和函數之內,而不是您的庫用戶的訪問權) )。

C ++比諸如C#,Java和D之類的語言要老,它們使您可以更精細地控制訪問級別。 C ++開創了很多這類東西,但並非總是能做到正確。 較新的語言的設計師已從中學習並進行了許多改進,因此,您將在C ++中沒有的新語言中找到某些概念(盡管有時C ++具有較新的語言未采用的概念)。 其他示例是包裝和密封/最終類和功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM