
1. 引言在 C 中類的訪問控制是封裝性的重要體現。與 Java 的包機制不同C 通過訪問修飾符、繼承方式、命名空間和構造器控制等手段來限制類的可見性與實例化方式。本文介紹幾種常見的禁止類被訪問的方法。2. 核心思路禁止一個類被訪問本質上是限制它的可見范圍、繼承方式和實例化方式。常見手段包括訪問修飾符將類成員或類本身聲明為 private 或 protected縮小訪問范圍。私有構造器禁止外部直接創建實例。匿名命名空間將類的定義放在匿名命名空間中限制其翻譯單元內的可見性。私有繼承通過私有繼承隱藏基類接口。3. C 中的實現方式3.1 匿名命名空間將類定義放在匿名命名空間中該類只能在當前源文件翻譯單元內訪問外部文件無法引用。namespace { class InternalHelper { public: void doWork() { // 僅當前源文件可見 } }; }3.2 私有構造器將構造器聲明為 private可以禁止外部直接創建實例常用于工具類或單例模式。class StringUtils { private: StringUtils() delete; // 禁止構造 public: static bool isEmpty(const std::string s) { return s.empty(); } };3.3 私有內部類如果類只服務于某個外部類可以將其定義為私有嵌套類徹底對外隱藏。class Outer { private: class Secret { public: void reveal() { // 僅 Outer 可見 } }; public: void run() { Secret s; s.reveal(); } };3.4 私有繼承通過私有繼承基類的公有接口在派生類外部不可見從而間接隱藏基類。class Base { public: void publicMethod() {} }; class Derived : private Base { // Base 的公有成員在 Derived 外部不可見 };4. 與其他語言的對比語言禁止訪問的方式C匿名命名空間、私有構造器、私有嵌套類、私有繼承Java包私有、私有構造器、私有內部類Python下劃線約定_Class、私有構造器__new__ 攔截TypeScriptprivate 修飾符、模塊內不導出5. 總結在 C 中禁止一個類被訪問核心是結合匿名命名空間、訪問修飾符、構造器控制和繼承方式。實際開發中應根據類的職責選擇合適的手段既保證封裝性又不影響代碼的可維護性。