C++ 編譯器在前置處理階段處理 #define。若在類別定義之前定義:
#define private public
#define protected public
class ClxECS {
private:
int iPrivate; // 經前置處理器展開為 public
};
// 現在可直接存取
void ECS_test() {
ClxECS obj;
obj.iPrivate = 13; // 編譯通過
cout << obj.iPrivate << endl;
}
private/protected 排列順序,強制存取可能導致相容性問題。friend class Tester; 明確授權。getter/setter 維護封裝邊界。protected 存取。技術可行 ≠ 應該使用。理解原理有助於除錯與面試,實務開發請堅持封裝原則,善用 C++ 提供的正規機制。