訪問說明符
有三個關鍵字充當訪問說明符。這些限制了對說明符後面的類成員的訪問,直到另一個說明符再次更改訪問級別:
關鍵詞 | 描述 |
---|---|
public |
每個人都可以訪問 |
protected |
只有類本身,派生類和朋友才能訪問 |
private |
只有類本身和朋友才能訪問 |
使用 class
關鍵字定義型別時,預設訪問說明符為 private
,但如果使用 struct
關鍵字定義型別,則預設訪問說明符為 public
:
struct MyStruct { int x; };
class MyClass { int x; };
MyStruct s;
s.x = 9; // well formed, because x is public
MyClass c;
c.x = 9; // ill-formed, because x is private
訪問說明符主要用於限制對內部欄位和方法的訪問,並強制程式設計師使用特定的介面,例如強制使用 getter 和 setter 而不是直接引用變數:
class MyClass {
public: /* Methods: */
int x() const noexcept { return m_x; }
void setX(int const x) noexcept { m_x = x; }
private: /* Fields: */
int m_x;
};
使用 protected
對於允許型別的某些功能只能被派生類訪問是很有用的,例如,在下面的程式碼中,方法 calculateValue()
只能從派生自基類 Plus2Base
的類訪問,例如 FortyTwo
:
struct Plus2Base {
int value() noexcept { return calculateValue() + 2; }
protected: /* Methods: */
virtual int calculateValue() noexcept = 0;
};
struct FortyTwo: Plus2Base {
protected: /* Methods: */
int calculateValue() noexcept final override { return 40; }
};
請注意,friend
關鍵字可用於向訪問受保護和私有成員的函式或型別新增訪問異常。
public
,protected
和 private
關鍵字也可用於授予或限制對基類子物件的訪問。請參見繼承示例。