首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 類成員函數為何能直接訪問 private 變量?

     編輯:程式設計疑難解答

現象觀察

代碼中 Stock::update() 等成員函數直接操作 private 修飾的 total_val,編譯通過並正常運行。疑惑:private 不應該只能類內部訪問嗎?成員函數算「類內部」嗎?

核心結論

是的,成員函數屬於類的內部作用域。

  • 定義時帶有類名限定(Stock::),即聲明該函數為 Stock 類的成員。
  • C++ 訪問控制基於類而非對象:同一類的所有成員函數、靜態成員函數、友元函數/類,均可訪問該類的 private/protected 成員。
  • this 指針隱式傳遞,成員函數通過 this->total_val 訪問當前對象的私有字段,完全合法。

對比:類外部訪問

Stock s;
s.total_val = 100; // 編譯錯誤:private 成員不可在類外直接訪問
s.update();        // 正確:通過公有成員函數間接修改

設計意圖

封裝的核心是對外隱藏實現細節,而非類內部自隱。成員函數作為類對外提供的接口,理應擁有完全訪問權,以實現不變量維護、邏輯封裝。

理解「類作用域」訪問規則,是掌握 C++ 封裝機制的關鍵一步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved